Vos requêtes incluent-elles ORDER BY … LIMIT clauses ?
Si vous mettez un ORDER BY … LIMIT après un UNION , il est appliqué à l'ensemble de l'UNION , et les index ne peuvent pas être utilisés dans ce cas.
Si id est une clé primaire, cette requête sera instantanée :
SELECT *
FROM table
ORDER BY id
LIMIT 1
, mais celui-ci ne le sera pas :
SELECT *
FROM table
UNION ALL
SELECT *
FROM table
ORDER BY id
LIMIT 1
Cela semble également être dû à ORDER BY . Trier un ensemble plus petit est plus rapide qu'un plus grand.
Avez-vous besoin que l'ensemble résultant soit trié ?
Sinon, débarrassez-vous simplement du dernier ORDER BY .