問題描述

我一直在跟蹤基於 WP 的站點的慢查詢日誌 (a long_query_time 的預設值設定為 10),我注意到以下查詢經常被記錄 –

# User@Host: root[root] @ localhost []
# Query_time: 0  Lock_time: 0  Rows_sent: 394  Rows_examined: 458
SELECT option_name, option_value FROM wp_options WHERE autoload = 'yes';

我不明白這樣一個小桌子可以花多少時間來執行。這只是一些其他問題的症狀嗎? (目前在專用虛擬機器上執行 Moodle,phpbb 和 WP) 。

最佳解決方案

更新:查詢被記錄的原因是它是 doesn’t use an index 。查詢時間為 0,即實際執行速度快。如果您不希望記錄這些選項,可以取消設定”log-queries-not-using-indexes” 選項。

wp_options 表在自動載入上沒有索引,所以查詢結束了進行全表掃描。一般來說,這個表不應該太大,所以這不是一個問題,但是我猜這是你的情況發生的。

新增索引可能會解決問題,但是如 TheDeadMedic 在註釋中指出的那樣,如果 autoload 的值大多數為 yes,或者在 yes 和 no 之間均勻分配,則可能不會:

首先,執行此查詢以檢視分發如何:

SELECT COUNT(*), autoload FROM wp_options GROUP BY autoload;

如果大部分設定為’no’,您可以透過在自動載入上新增索引來解決問題。

ALTER TABLE wp_options ADD INDEX (`autoload`);

但是,您可能希望瞭解為什麼該表已經變得太大了。可能有一些寫得很不好的外掛做一些有趣的事情。

次佳解決方案

我偶然發現幾天前在我的伺服器上執行的 mytop 中提到的查詢,實際上每個查詢花費了相當長的時間 (約 10 秒)!所以有 real-world 的情況,其中 wp_options 可能會增加到有問題的大小。在我的情況下,我懷疑快取外掛 Cachify 負責腹脹 wp_options 。

這個特定 wp_options 的資料:

5,309 rows
130MB of data

作為一個解決方案,我新增了類似於 Vinay Pai 釋出的解決方案的索引,該解決方案完美無缺。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。