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
.