|
|
|
долго выполняется запрос на not exist (или left join where field is null)
|
|||
|---|---|---|---|
|
#18+
Добрый день! Помогите с запросом на not exist (или left join where field is null - пробовал и так все без толку..) На MSSQL данный запрос выполняется в лет, а на MySQL – секунд 10 (это не было бы так критично если доступ к базе не был через браузер и phpMyAdmin…который отваливается по тайм ауту. Итак: Имеются таблицы (объемы смехотворные): 1624 row Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 232 row Код: sql 1. 2. 3. 4. 5. 6. 7. Порядка 3-4 тысяч записей Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Запрос Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Выполняется не позволительно долго :( EXPLAIN Выдает следующую картину: id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY l ALL UpdateLog_MNC NULL NULL NULL 15715 Using where; Using temporary; Using filesort 1 PRIMARY c eq_ref Countries_MCC Countries_MCC 11 func 1 Using where 2 DEPENDENT SUBQUERY Operators index NULL Operators_MNC 31 NULL 1660 Using where; Using index Помогите исправить запрос. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2013, 16:11:34 |
|
||
|
долго выполняется запрос на not exist (или left join where field is null)
|
|||
|---|---|---|---|
|
#18+
Да видимо, CONCAT( MCC, MNC ) from `Operators`, - для MySQL "убийственная" операция, приводящая к не использование индекса INDEX Operators_MNC (MCC, MNC) :(( Добавляется поле MCC_MNC в таблице `Operators` и строится индекс по нему. Меняем запрос на: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Время исполнения - 0,167c. Увеличение быстродействия в 42 раза. Печально что MySQL при сложении строк перестает использовать индекс... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2013, 14:04:41 |
|
||
|
долго выполняется запрос на not exist (или left join where field is null)
|
|||
|---|---|---|---|
|
#18+
Lisichkin, Если версия MySQL ниже, чем 5.6, то избавьтесь от конструкции in (select ...) вообще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2013, 14:13:54 |
|
||
|
долго выполняется запрос на not exist (или left join where field is null)
|
|||
|---|---|---|---|
|
#18+
miksoft Так я not in (select ..) не от хорошей жизни написал - с начала у меня было left join `Operators` o where o.id is null - мне показаться что эта конструкция работает чуть медленнее.. P.S. Версия MySQL 5.5.28 P.S.S. Я в MySQL не очень - больше в MS SQL - там, уверю, такой проблемы не возникло бы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2013, 14:20:03 |
|
||
|
долго выполняется запрос на not exist (или left join where field is null)
|
|||
|---|---|---|---|
|
#18+
LisichkinТак я not in (select ..) не от хорошей жизни написал - с начала у меня было left join `Operators` o where o.id is null - мне показаться что эта конструкция работает чуть медленнее..Возможно, ей чего-то не хватало. Обычно in (select ..) приводит к тому, что подзапрос в скобках выполняется множество раз вместо одного. Если дальнейшее ускорение вообще имеет смысл, то попробуйте еще раз left join. Покажите нам получившийся запрос и его план. Еще вариант - вынести проверку l.MNC из группировки. Зависит от того, какая доля записей отбрасывается по этому условию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2013, 14:27:38 |
|
||
|
долго выполняется запрос на not exist (или left join where field is null)
|
|||
|---|---|---|---|
|
#18+
miksoft Запрос с not in (select ..) Выполняется ~ 0,587 0,154 0,174 План: id select_type table type possible_keys key key_len ref 1 PRIMARY l ALL UpdateLog_MNC (null) (null) (null) 1 PRIMARY c eq_ref Countries_MCC Countries_MCC 11 func 2 DEPENDENT SUBQUERY Operators index_subquery Operators_MNC_MCC Operators_MNC_MCC 26 func Запрос с left join Выполняется за ~ 0,320 0,321 План: id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE l ALL UpdateLog_MNC (null) (null) (null) 15752 Using where; Using temporary; Using filesort 1 SIMPLE c eq_ref Countries_MCC Countries_MCC 11 func 1 Using where 1 SIMPLE o ref Operators_MNC_MCC Operators_MNC_MCC 26 u28086s1.l.MNC 1 Using where; Not exists Смысл запроса в том, что в "большой" массе данных в таблице updatelog (сейчас 16 тысяч записей) - находится очень малое количество (не более 10 записей) для которых нет ссылки по полю l.MNC на o.MNC_MCC - поэтому не нужно выносить проверку l.MNC из группировки. Данные запроса интерпретируются так: Вывести все записи в логе, для которых нет информации из справочника "Операторы" P.S. Не знаю как красиво оформить план запроса :(( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2013, 14:54:31 |
|
||
|
долго выполняется запрос на not exist (или left join where field is null)
|
|||
|---|---|---|---|
|
#18+
Да, забыл указать второй запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2013, 15:02:44 |
|
||
|
долго выполняется запрос на not exist (или left join where field is null)
|
|||
|---|---|---|---|
|
#18+
Lisichkin, А сколько записей получается в результате запроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2013, 16:00:16 |
|
||
|
долго выполняется запрос на not exist (или left join where field is null)
|
|||
|---|---|---|---|
|
#18+
miksoft Немного напутал: Без Код: sql 1. - Данные обновлявшиеся только за последний месяц - 44 записи С HAVING - 7 записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2013, 16:08:18 |
|
||
|
долго выполняется запрос на not exist (или left join where field is null)
|
|||
|---|---|---|---|
|
#18+
авторP.S. Не знаю как красиво оформить план запроса :(( скриншотом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2013, 16:20:26 |
|
||
|
долго выполняется запрос на not exist (или left join where field is null)
|
|||
|---|---|---|---|
|
#18+
Lisichkin, Если возникла потребность искать неизвестное или неравенство, это верный признак что БД спроектирована в корне неправильно. Что, конечно, может отражать неправильные бизнес-процессы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2013, 22:54:42 |
|
||
|
долго выполняется запрос на not exist (или left join where field is null)
|
|||
|---|---|---|---|
|
#18+
debloggerLisichkin, Если возникла потребность искать неизвестное или неравенство, это верный признак что БД спроектирована в корне неправильно. Что, конечно, может отражать неправильные бизнес-процессы. deblogger - интересный бот, кто-то хорошо прикалывается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2013, 23:13:36 |
|
||
|
долго выполняется запрос на not exist (или left join where field is null)
|
|||
|---|---|---|---|
|
#18+
неинтересный бот, SELECT beer.name FROM worldbeers WHERE beer.name != "Zhigulyouvskoe"; Как на SQL "почил в бозе ожидая рекордсета"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2013, 23:32:28 |
|
||
|
долго выполняется запрос на not exist (или left join where field is null)
|
|||
|---|---|---|---|
|
#18+
debloggerнеинтересный бот, SELECT beer.name FROM worldbeers WHERE beer.name != "Zhigulyouvskoe"; Как на SQL "почил в бозе ожидая рекордсета"? а кто алиас beer ставить будет? Пушкин? я тут подправил, вернулся ресультат: Гинес. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2013, 03:25:44 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38321985&tid=1836494]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 202ms |
| total: | 359ms |

| 0 / 0 |
