Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warum sind UNION-Abfragen in MySQL so langsam?

Enthalten Ihre Abfragen ORDER BY … LIMIT? Klauseln?

Wenn Sie einen ORDER BY … LIMIT eingeben nach einem UNION , wird es auf die gesamte UNION angewendet , und Indizes können in diesem Fall nicht verwendet werden.

Wenn id ein Primärschlüssel ist, wird diese Abfrage sofort ausgeführt:

SELECT  *
FROM    table
ORDER BY id
LIMIT 1

, aber dieses hier nicht:

SELECT  *
FROM    table
UNION ALL
SELECT  *
FROM    table
ORDER BY id
LIMIT 1

Dies scheint auch an ORDER BY zu liegen . Das Sortieren eines kleineren Satzes ist schneller als ein größerer.

Soll die Ergebnismenge sortiert werden?

Wenn nicht, entfernen Sie einfach das abschließende ORDER BY .