Heim > Datenbank > MySQL-Tutorial > Warum verursacht meine MySQL-Unterabfrage in einer IN-Klausel Leistungsprobleme?

Warum verursacht meine MySQL-Unterabfrage in einer IN-Klausel Leistungsprobleme?

Mary-Kate Olsen
Freigeben: 2024-11-29 05:22:25
Original
659 Leute haben es durchsucht

Why is my MySQL subquery in an IN clause causing performance issues?

MySQL – Unterabfragekorrelation verlangsamt die Leistung von IN-Klauseln

Die angegebene Abfrage, die doppelte Zeilen in einer Datenbanktabelle mithilfe einer Unterabfrage in identifiziert In der IN-Klausel treten erhebliche Leistungsprobleme auf. Obwohl die Unterabfrage selbst schnell ausgeführt wird, dauert die Abfrage mit der IN-Klausel erheblich länger.

Grund für die Langsamkeit

Die Verlangsamung wird durch die korrelierte Natur der Unterabfrage verursacht. In einer korrelierten Abfrage referenziert die Unterabfrage Spalten der äußeren Abfrage und macht sie so von der Ausführung der äußeren Abfrage abhängig. Dadurch löst jede Zeile in der äußeren Tabelle eine separate Ausführung der Unterabfrage aus.

Lösung

Um das Problem zu beheben, kann die korrelierte Unterabfrage in eine umgewandelt werden nicht korrelierte Unterabfrage durch Auswahl aller darin enthaltenen Spalten. Dadurch wird die Abhängigkeit von der äußeren Abfrage eliminiert und die Leistung erheblich verbessert:

SELECT * FROM
(
    SELECT relevant_field
    FROM some_table
    GROUP BY relevant_field
    HAVING COUNT(*) > 1
) AS subquery
Nach dem Login kopieren

Endgültige Abfrage

Die geänderte Abfrage sieht folgendermaßen aus:

SELECT *
FROM some_table
WHERE relevant_field IN
(
    SELECT * FROM
    (
        SELECT relevant_field
        FROM some_table
        GROUP BY relevant_field
        HAVING COUNT(*) > 1
    ) AS subquery
)
Nach dem Login kopieren

Diese nicht korrelierte Abfrage wird viel schneller ausgeführt als die ursprüngliche korrelierte Abfrage.

Das obige ist der detaillierte Inhalt vonWarum verursacht meine MySQL-Unterabfrage in einer IN-Klausel Leistungsprobleme?. 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