| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MySQL > Оптимизация запроса not in (select ... |
| Автор: sanich_ 6.11.2014, 19:16 | ||||||
| Добрый день. Прошу помочь в оптимизации запроса:
Не очень быстро работает, 2.4 сек Проблема имеено в последней выборке
Вычитал что not in можно заменить на LEFT OUTER JOIN Сделал следующее:
Тоже не очень быстро работает, 2.37 сек Собственно задача из первой выборки email вычесть вторую выборку email Помогите пожалуйста |
| Автор: Akina 6.11.2014, 22:27 |
| Индексов нехватает имхо. Но всё равно это хреновый запрос - подзапрос льётся во временную таблицу, фуллскан, все дела.. Кстати, если вместо UNION ALL использовать UNION - можно выкинуть DISTINCT. На скорость почти не повлияет, впрочем. |
| Автор: sanich_ 7.11.2014, 04:09 | ||||||
Чуток оптимизировал до вида:
Стал выполнятся за 1.8 сек, а было 2.4 сек. Но всеравно не быстро Теперь
Показывает следующее: http://SSMaker.ru/1e23b31a/ |
| Автор: Akina 7.11.2014, 08:55 |
Правильно, потому что накопление и сортировка заменились сортировкой при слиянии. Быстрее не будет. Смирись. Либо измени структуру БД. Объяви email отдельной сущностью, выволоки в отдельную таблицу, а в таблицах object, job_list, send_message и send_ignore_list_email соответственно FK на неё. Не полетит, конечно, но разика в три ускорится. Добавлено через 1 минуту и 2 секунды Присоединяйте скрины к сообщению. Ссылки наружу - не лучшая практика. А EXPLAIN можно вообще цитировать с консоли. |