Langsame MySQL-Auswahlabfrage zur Leistungssteigerung optimiert
Bei dieser MySQL-Abfrage kam es aufgrund ihrer Komplexität und des Datenvolumens zu Verzögerungen. Um dies zu mildern, ist es wichtig, die Beziehungen zwischen den beteiligten Tabellen zu verstehen:
Die ursprüngliche Abfrage wurde wie folgt angezeigt eine lange Ausführungszeit, insbesondere bei Verwendung bei der Webseitenerstellung:
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
Analyse der Ausführung Plan:
Der Leistungsengpass der Abfrage wurde in der „explain“-Ausgabe identifiziert:
[Explain Image Link]
Wie beobachtet, musste die Abfrage Daten schreiben auf die Festplatte, was sich erheblich auf die Geschwindigkeit auswirkt.
Lösung:
Zu beheben Für dieses Problem wurde ein überarbeitetes Schema mithilfe der zusammengesetzten Indizierung entworfen. Diese neue Struktur zeigte erhebliche Leistungsverbesserungen:
DROP TABLE IF EXISTS poster; CREATE TABLE poster ( poster_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL UNIQUE ) ENGINE = INNODB; DROP TABLE IF EXISTS category; CREATE TABLE category ( cat_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL UNIQUE ) ENGINE = INNODB; DROP TABLE IF EXISTS poster_category; CREATE TABLE poster_category ( cat_id MEDIUMINT UNSIGNED NOT NULL, poster_id INT UNSIGNED NOT NULL, PRIMARY KEY (cat_id, poster_id) -- Note the clustered composite index !! ) ENGINE = INNODB;
Mit dem zusammengesetzten Index lieferte die folgende überarbeitete Abfrage blitzschnelle Ergebnisse:
SELECT p.*, c.* FROM poster_category pc INNER JOIN category c ON pc.cat_id = c.cat_id INNER JOIN poster p ON pc.poster_id = p.poster_id WHERE pc.cat_id = 623 ORDER BY p.name LIMIT 32;
Dieser optimierte Ansatz löste das Problem effektiv Leistungsprobleme, wodurch die Anwendungswebseite reaktionsfähig und benutzerfreundlich wird.
Das obige ist der detaillierte Inhalt vonWie können wir eine langsame MySQL-SELECT-Abfrage optimieren, um die Webseitenleistung zu verbessern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!