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 .