Wenn Sie LIMITdie Leistung verbessern möchten , benötigen Sie
- Verstehen Sie die Daten, die Sie abrufen
- Richtige Indizierung der richtigen Reihenfolge der Spalten
- Übernehmen Sie die Verantwortung für das Refactoring der Abfrage
- Verwendung
LIMITvorJOIN
Diese Prinzipien können einen langen Weg gehen, wenn Sie sie orchestrieren können.
Ich habe diese Konzepte gelernt, indem ich mir dieses YouTube-Video angesehen habe (hör dir den französischen Akzent genau an).
Ich habe diese Konzepte verwendet, um eine sehr schwierige StackOverflow-Frage zum Abrufen der 40 wichtigsten Artikel aus einigen Tabellen zu beantworten: 12. Mai 2011: Abrufen einer einzelnen Zeile aus der Join-Tabelle .
In meiner Antwort auf diese Frage (16. Mai 2011) habe ich die folgende Abfrage geschrieben und gründlich getestet:
SELECT
AAA.author_id,
AAA.date_created,
IFNULL(BBB.title,'<NO_TITLE>') title,
IFNULL(CCC.filename,'<NO-IMAGE>') filename,
IFNULL(CCC.date_added,'<NO-IMAGE-DATE>') image_date
FROM
(
SELECT
AA.id,
AA.date_added,
BB.author_id,
BB.date_created
FROM
(
SELECT
A.id,IFNULL(MAX(B.date_added),'1900-01-01 00:00:00') date_added
FROM (SELECT id FROM articles ORDER BY date_created DESC LIMIT 40) A
LEFT JOIN article_images B ON A.id = B.article_id
GROUP BY A.id
) AA
INNER JOIN articles BB USING (id)
) AAA
LEFT JOIN article_contents BBB ON AAA.id=BBB.article_id
LEFT JOIN article_images CCC
ON (AAA.id=CCC.article_id AND AAA.date_added=CCC.date_added)
ORDER BY AAA.date_created DESC;
Bitte beachten Sie die Zeile in der Abfrage mit dem LIMIT
FROM (SELECT id FROM articles ORDER BY date_created DESC LIMIT 40) A
Diese Unterabfrage ist drei Ebenen tief vergraben. Dadurch konnte ich die letzten 40 Artikel verwenden LIMIT. Danach habe ich die notwendigen JOINs durchgeführt.
GEWONNENE ERKENNTNISSE
- Das
LIMITDurchführen von Unterabfragen ist aufgrund der Kardinalität der Indizes, des Dateninhalts und der Größe der Ergebnismenge aus dem möglicherweise nicht immer die Antwort LIMIT. Wenn Sie alle Ihre "Enten in einer Reihe" haben (beachten Sie die vier Prinzipien für Ihre Abfrage), können Sie überraschend gute Ergebnisse erzielen.
- Machen Sie Ihre Abfragen so einfach wie möglich,
LIMITindem Sie nur Schlüssel sammeln.
LIMITdie Effizienz verbessern: Optimieren von LIMIT-Abfragen