慢速 MySQL 選擇查詢最佳化以提高效能
此 MySQL 查詢由於其複雜性和資料量而面臨延遲。為了緩解這種情況,必須了解所涉及的表之間的關係:
原始查詢如下所示執行時間過長,尤其是在網頁建立中使用時:
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
分析執行計畫的:
在「解釋」輸出中確定了查詢的效能瓶頸:
[解釋影像連結]
據觀察,查詢有將資料寫入磁碟,顯著影響
解決方案:
為了解決此問題,使用複合索引設計了修訂後的架構。這個新結構展示了性能的顯著改進:
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;
使用複合索引後,以下修改後的查詢產生了閃電般的結果:
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;
這種優化該方法有效解決了效能問題,使應用程式網頁響應靈敏且用戶友好。
以上是我們如何優化緩慢的 MySQL SELECT 查詢以提高網頁效能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!