Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос / 8 сообщений из 8, страница 1 из 1
08.09.2014, 20:54:46
    #38741089
Sankin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос
Здравствуйте.
Есть таблица ~10млн записей.
вида: id, status,date.
Для одного id может быть несколько статусов.
Нужно выбрать все id, у которых есть статус 5 и нет статуса 0.
Запрос
Код: sql
1.
2.
3.
select id from table t1
left join (select id from table where status=0) t2 on t1.id=t2.id
where t1.status=5 and t2.status is null


Но получается, что по отдельности запросы типа
Код: sql
1.
select id from table where status=0

выполняются быстро, а общий - медленно.
...
Рейтинг: 0 / 0
08.09.2014, 21:36:23
    #38741108
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос
Sankin,

1. попробуйте для промежуточного запроса сделать вьюху и джойнить по ней.

2. если у вас есть возможность выбирать сервер мускуля, то поставьте себе версию выше 5.6.6, потом что в версии ниже сервер плохо оптимизирует динамические алиасы

3. интересно узнать какую скорость покажет

Код: sql
1.
2.
update t join (select id from t where status is null) s on t.id = s.id set t.is_zeroed = 1;
select id from t where status = 5 && is_zeroed = 0;
...
Рейтинг: 0 / 0
08.09.2014, 21:43:29
    #38741109
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос
Lumix1. попробуйте для промежуточного запроса сделать вьюху и джойнить по ней.Это точно скорости не прибавит.
Lumix2. если у вас есть возможность выбирать сервер мускуля, то поставьте себе версию выше 5.6.6, потом что в версии ниже сервер плохо оптимизирует динамические алиасыРасшифруйте, пожалуйста.
Lumix3. интересно узнать какую скорость покажет

Код: sql
1.
2.
update t join (select id from t where status is null) s on t.id = s.id set t.is_zeroed = 1;
select id from t where status = 5 && is_zeroed = 0;

Вы забыли добавить, что понадобится добавить в табличку поле is_zeroed.
...
Рейтинг: 0 / 0
08.09.2014, 21:47:19
    #38741111
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос
SankinНужно выбрать все id, у которых есть статус 5 и нет статуса 0.решение "в лоб":
Код: sql
1.
2.
3.
select id from mytable t1
where t1.status=5
  and not exists (select null from mytable t2 where t2.status=0 and t1.id=t2.id)

Возможно, нужно добавить distinct.


SankinЗапрос
Код: sql
1.
2.
3.
select id from table t1
left join (select id from table where status=0) t2 on t1.id=t2.id
where t1.status=5 and t2.status is null

Покажите план этого запроса.
...
Рейтинг: 0 / 0
09.09.2014, 05:00:36
    #38741234
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос
ещё одно решение, тоже практически "в лоб"
Код: sql
1.
2.
3.
4.
select id 
from table t1
left join table t2 on t1.id=t2.id and t2.status=0
where t1.status=5 and t2.status is null
...
Рейтинг: 0 / 0
09.09.2014, 05:50:37
    #38741247
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос
Sankin... выполняются быстро, а общий - медленно....


как бы еше один ФАК сделать ?
что люди с такими вопросами проводили:

1. експлейн
2. скорость приведенных запросов
3. указывали какую скорость хотят в результате
...
Рейтинг: 0 / 0
09.09.2014, 07:02:44
    #38741252
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос
javajdbcкак бы еше один ФАК сделать ?хотел написать, что это написано в правилах
оказалось, что там этого нет :)
...
Рейтинг: 0 / 0
09.09.2014, 10:03:39
    #38741349
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос
javajdbcкак бы еше один ФАК сделать ?Сделать-то не сложно. Вы пишете - я прикрепляю.
Теоретически могу и сам написать, но дойдут ли у меня когда-нибудь до этого голова и руки - не знаю.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]