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 .