Mysql
 sql >> Base de données >  >> RDS >> Mysql

Pourquoi les requêtes UNION sont-elles si lentes dans MySQL ?

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 .