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