Heim > Datenbank > MySQL-Tutorial > Hauptteil

Warum verursacht meine MySQL-Abfrage temporäre Tabellen und Dateisortierung?

Patricia Arquette
Freigeben: 2024-11-04 08:50:02
Original
561 Leute haben es durchsucht

Why Does My MySQL Query Cause Temporary Tables and Filesort?

Probleme mit Temporary und Filesort in MySQL: Eine Schema- und Abfrageanalyse

In einem Ereignisverfolgungssystem mit Nachschlagetabellen und einer Protokollierungstabelle, Bei einer Abfrage, die Objektstatistiken in absteigender Reihenfolge ihrer Wichtigkeit anzeigen soll, tritt ein Problem auf. Während die Abfrage mit einer kleinen Anzahl von Einträgen ordnungsgemäß funktioniert, weisen ihre EXPLAIN-Ergebnisse auf Optimierungspotenzial hin.

Die betreffende Abfrage verwendet einen linken Join zwischen den Tabellen „event_log“ und „lookup_event_objects“, wobei die Ergebnisse nach „object_id“ gruppiert und nach „count_rows“ sortiert werden absteigender Reihenfolge, gefolgt von object_desc in aufsteigender Reihenfolge. Diese Abfrage generiert jedoch Warnungen zur Verwendung einer temporären Tabelle und Dateisortierung.

MySQL verwendet temporäre Tabellen, wenn die Abfrage eine andere ORDER BY-Klausel als die GROUP BY-Klausel enthält oder wenn auf die Sortierung oder Gruppierung von anderen Tabellen als verwiesen wird der erste im Join. In diesem Fall basiert die Sortierung auf einem berechneten Feld, was die Indexverwendung unmöglich macht, daher die Verwendung von Dateisortierung.

Um das Problem zu beheben, entfernen Sie die ORDER BY-Klausel für leo.object_desc. Dadurch entfällt die Notwendigkeit temporärer Tabellen und Dateisortierungen, was die Abfrageleistung verbessert:

<code class="sql">EXPLAIN SELECT 
            el.object_id, 
            leo.object_desc, 
            COUNT(el.object_id) as count_rows
        FROM 
            event_log el 
            LEFT JOIN lookup_event_objects leo ON leo.object_id = el.object_id
        GROUP BY 
            el.object_id
        ORDER BY 
            count_rows DESC;</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum verursacht meine MySQL-Abfrage temporäre Tabellen und Dateisortierung?. 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