使用動態(tài)數(shù)據(jù)庫驅(qū)動的網(wǎng)站,例如WordPress,你的網(wǎng)站可能依然有一個問題亟待解決:數(shù)據(jù)庫查詢拖慢了網(wǎng)站訪問速度。
使用動態(tài)數(shù)據(jù)庫驅(qū)動的網(wǎng)站,例如WordPress,你的網(wǎng)站可能依然有一個問題亟待解決:數(shù)據(jù)庫查詢拖慢了網(wǎng)站訪問速度。我將介紹如何識別導(dǎo)致性能出現(xiàn)問題的查詢,如何找出它們的問題所在,以及快速修復(fù)這些問題和其他加快查詢速度的方法。我會把門戶網(wǎng)站 deliciousbrains.com 出現(xiàn)的 拖慢查詢速度的情況作為實際的案例。
定位
處理慢SQL查詢的第一步是找到慢查詢。Ashley已經(jīng)在之前的 博客 里面贊揚了調(diào)試插件 Query Monitor ,而且這個插件的數(shù)據(jù)庫查詢特性使其成為定位慢SQL查詢的寶貴工具。該插件會報告所有頁面請求過程中的數(shù)據(jù)庫請求,并且可以通過調(diào)用這些查詢代碼或者原件(插件,主題,WordPress核)過濾這些查詢,高亮重復(fù)查詢和慢查詢。
要是不愿意在生產(chǎn)安環(huán)境裝調(diào)試插件,也可以打開 MySQL Slow Query Log,這樣在特定時間執(zhí)行的所有查詢都會被記錄下來。這種方法配置和設(shè)置存放查詢位置相對簡單。由于這是一個服務(wù)級別的調(diào)整,性能影響會小于使用調(diào)試插件,但當(dāng)不用的時候也應(yīng)該關(guān)閉。
理解
一旦你找到了一個你要花很大代價找到的查詢,那么接下來就是嘗試去理解它并找到是什么讓查詢變慢。最近,在我們開發(fā)我們網(wǎng)站的時候,我們找到了一個要執(zhí)行8秒的查詢。
我們使用WooCommerce和定制版的WooCommerce軟件插件來運行我們的插件商店。此查詢的目的是獲取那些我們知道客戶號的客戶的所有訂閱。 WooCommerce是一個稍微復(fù)雜的數(shù)據(jù)模型, 即使訂單以自定義的類型存儲,用戶的ID(商店為每一個用戶創(chuàng)建的WordPress)也沒有存儲在 post_author, 而是作為后期數(shù)據(jù)的一部分。訂閱軟件插件給自義定表創(chuàng)建了一對鏈接。讓我們深入了解查詢的更多信息。
MySQL是你的朋友
MySQL有一個很方便的語句 DESCRIBE ,它可以輸出表結(jié)構(gòu)的信息,比如字段名,數(shù)據(jù)類型等等。
你可能已經(jīng)知道了這個語句。但是你知道 DESCRIBE語句可以放在SELECT, INSERT, UPDATE, REPLACE 和 DELETE語句前邊使用嗎 ?更為人們所熟知的是他的同義詞 EXPLAIN ,并將提供有關(guān)該語句如何執(zhí)行的詳細信息。