首頁 >資料庫 >mysql教程 >我們如何優化緩慢的 MySQL SELECT 查詢以提高網頁效能?

我們如何優化緩慢的 MySQL SELECT 查詢以提高網頁效能?

Linda Hamilton
Linda Hamilton原創
2024-12-30 08:39:14528瀏覽

How Can We Optimize a Slow MySQL SELECT Query to Improve Web Page Performance?

慢速 MySQL 選擇查詢最佳化以提高效能

此 MySQL 查詢由於其複雜性和資料量而面臨延遲。為了緩解這種情況,必須了解所涉及的表之間的關係:

  • poster_data:儲存各個海報的資料。
  • poster_categories: 列出所有可用類別(例如電影、藝術)。
  • poster_prodcat:將海報連結到各自的類別,單一海報可以有多個條目。

原始查詢如下所示執行時間過長,尤其是在網頁建立中使用時:

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn