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

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

Linda Hamilton
發布: 2024-12-30 08:39:14
原創
507 人瀏覽過

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板