Le tue domande includono ORDER BY … LIMIT
clausole?
Se inserisci un ORDER BY … LIMIT
dopo un UNION
, viene applicato all'intero UNION
e in questo caso non è possibile utilizzare gli indici.
Se id
è una chiave primaria, questa query sarà istantanea:
SELECT *
FROM table
ORDER BY id
LIMIT 1
, ma questo no:
SELECT *
FROM table
UNION ALL
SELECT *
FROM table
ORDER BY id
LIMIT 1
Questo sembra essere dovuto anche a ORDER BY
. L'ordinamento di un set più piccolo è più veloce di uno più grande.
Hai bisogno che il set risultante sia ordinato?
In caso contrario, elimina l'ultimo ORDER BY
.