Heim > Datenbank > MySQL-Tutorial > Warum verwendet meine Abfrage temporäre Tabellen und Filesort?

Warum verwendet meine Abfrage temporäre Tabellen und Filesort?

Susan Sarandon
Freigeben: 2024-11-05 01:15:02
Original
305 Leute haben es durchsucht

Why Does My Query Use Temporary Tables and Filesort?

Warum MySQL Temporär und Filesort in dieser Abfrage verwendet

Ihre Abfrage zum Extrahieren von Objektstatistiken aus den Tabellen „event_log“ und „lookup_event_objects“ weist einen Leistungsengpass auf. wie durch die EXPLAIN-Ausgabe „Using index; Using temporary; Using filesort“ angezeigt. Hier ist der Grund:

Temporäre Tabellen

MySQL verwendet temporäre Tabellen, wenn eine Nichtübereinstimmung zwischen den ORDER BY- und GROUP BY-Klauseln besteht oder wenn die Sortier- oder Gruppierungsspalten zu nicht gehören -verbundene Tabellen. In diesem Fall leidet Ihre Abfrage unter der ersten Bedingung, da sich die ORDER BY-Klausel (count_rows DESC, leo.object_desc ASC) von der GROUP BY-Klausel (el.object_id) unterscheidet.

Filesort

„Filesort verwenden“ zeigt an, dass MySQL die in der ORDER BY-Klausel angegebene Sortierung nicht mithilfe eines Index durchführen kann. Da Sie nach einem berechneten Feld (count_rows) sortieren, muss die Datenbank einen vollständigen Tabellenscan durchführen und die Ergebnisse sortieren.

Mögliche Lösung

Wie in vorgeschlagen Gemäß der bereitgestellten Antwort besteht die Lösung darin, die Diskrepanz zwischen den Klauseln ORDER BY und GROUP BY zu beseitigen. Sie könnten den count_rows-Alias ​​durch die eigentliche Zähloperation innerhalb der GROUP BY-Klausel ersetzen:

SELECT
    el.object_id,
    leo.object_desc,
    COUNT(el.object_id) AS count
FROM
    event_log el
LEFT JOIN
    lookup_event_objects leo ON leo.object_id = el.object_id
GROUP BY
    el.object_id,
    count
ORDER BY
    count DESC,
    leo.object_desc ASC;
Nach dem Login kopieren

Dadurch entfällt die Notwendigkeit temporärer Tabellen und Dateisortierungen, was möglicherweise die Leistung der Abfrage verbessert.

Das obige ist der detaillierte Inhalt vonWarum verwendet meine Abfrage temporäre Tabellen und Filesort?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage