Heim >Datenbank >MySQL-Tutorial >Wie kann ich eine langsame MySQL-Abfrage optimieren, um die Leistung zu verbessern und die Festplatten-E/A zu reduzieren?
MySQL-Abfrage optimieren, um Ausführungszeit und Festplattenschreibvorgänge zu reduzieren
Bei Ihrer MySQL-Abfrage treten Leistungsprobleme auf, sodass die Fertigstellung und das Schreiben darauf mehrere Minuten dauern Festplatte während der Ausführung. Dies kann die Reaktionsfähigkeit Ihrer Webseite erheblich beeinträchtigen. Um dieses Problem anzugehen, werden wir eine Lösung untersuchen, die Datenmodellierung und Indexoptimierung umfasst.
Die von Ihnen erwähnte langsame Abfrage ist:
SELECT * FROM poster_prodcat, poster_data, poster_categories WHERE poster_data.apnumber = poster_prodcat.apnumber AND poster_categories.apcatnum = poster_prodcat.apcatnum AND poster_prodcat.apcatnum='623' ORDER BY aptitle ASC LIMIT 0, 32
Laut der EXPLAIN-Ausgabe führt die Abfrage eine vollständige Abfrage durch Tabellenscan für die Tabelle poster_prodcat, die über 17 Millionen Zeilen enthält. Dies trägt zur übermäßigen Ausführungszeit bei.
Um die Abfrageleistung zu optimieren, können wir die folgenden Änderungen implementieren:
Normalisierung und Indizierung:
Hier ist ein Beispiel des aktualisierten Schemas:
CREATE TABLE poster ( poster_id INT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL UNIQUE, PRIMARY KEY (poster_id) ) ENGINE=InnoDB; CREATE TABLE category ( cat_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL UNIQUE, PRIMARY KEY (cat_id) ) ENGINE=InnoDB; CREATE TABLE poster_category ( cat_id MEDIUMINT UNSIGNED NOT NULL, poster_id INT UNSIGNED NOT NULL, PRIMARY KEY (cat_id, poster_id), INDEX (poster_id) -- Clustered composite index ) ENGINE=InnoDB;
Sobald die Daten normalisiert und indiziert sind , sollte die Abfrage viel schneller ausgeführt werden, was die Ausführungszeit erheblich verkürzt.
Das obige ist der detaillierte Inhalt vonWie kann ich eine langsame MySQL-Abfrage optimieren, um die Leistung zu verbessern und die Festplatten-E/A zu reduzieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!