Suas consultas incluem
ORDER BY … LIMIT cláusulas? Se você colocar um
ORDER BY … LIMIT após um UNION , ele é aplicado a todo o UNION , e os índices não podem ser usados nesse caso. Se
id é uma chave primária, esta consulta será instantânea:SELECT *
FROM table
ORDER BY id
LIMIT 1
, mas este não irá:
SELECT *
FROM table
UNION ALL
SELECT *
FROM table
ORDER BY id
LIMIT 1
Isso também parece ser devido a
ORDER BY . Classificar um conjunto menor é mais rápido do que um maior. Você precisa que o conjunto resultante seja classificado?
Caso contrário, basta se livrar do
ORDER BY final .