Оптимизация: Where перед Union
От: Буравчик Россия  
Дата: 19.09.18 18:00
Оценка:
В таблицах TableA и TableB есть индексы по полю 'a'.
Mysql не смог оптимизировать такой запрос:

SELECT a, t
FROM (
    SELECT a, x as t FROM TableA
    UNION
    SELECT a, y as t FROM TableB)
WHERE a < :p1 AND a > :p2


Вроде ж понятно, что операцию WHERE лучше применить сначала к TableA и TableB (используя индексы), а потом уже делать UNION.

Если ему явно указать WHERE для каждой таблицы, то все работает быстро.
SELECT a, t
FROM (
    SELECT a, x as t FROM TableA WHERE a < :p1 AND a > :p2
    UNION
    SELECT a, y as t FROM TableB WHERE a < :p1 AND a > :p2)


Не ожидал такого. Это нормально для оптимизатора БД не разобраться в этой ситуации?
Best regards, Буравчик
Отредактировано 19.09.2018 18:01 Буравчик . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.