В таблицах 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)
Не ожидал такого. Это нормально для оптимизатора БД не разобраться в этой ситуации?