Решение проблем с индексированием сложных запросов через UNION выборки с алиасом

Бывает так, что условие WHERE становится неадекватным настолько, что расставить индексы для быстрого запроса не представляется возможным. Либо не подходит изначальный контекст запроса. В таком случае можно разбить запросы на 2 и более с лимитами, затем объединить эти результаты при помощи UNION, обязательно присвоив алиас и сделать запрос уже к ним. Mysql автоматом создаст небольшую временную таблицу при выборке из UNION алиаса, но это будет гораздо быстрее, чем не индексируемый запрос. Например:

в первом запросе, необходима выборка из таблицы answers, а вернее её отсутствие(IS NULL), а во втором это не требуется, т.е., если мы втулим всё в один запрос, то строки из answers создадут дубли в выборке, во избежание придётся использовать DISTINCT и условия, расставить по которым индексы уже не получается. Как решение:

 

Оставить комментарий

Ваш адрес email не будет опубликован.