我試圖通過向查詢出現在慢查詢日誌中添加索引來改善錘打WordPress數據庫的性能。你如何在MySQL中強制查詢使用索引?
在MS SQL,您可以使用查詢提示強制查詢使用索引,但它通常是很容易獲得的查詢,如果你正確等覆蓋列
我有這樣的查詢使用索引出現在慢查詢日誌很多
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
WHERE 1=1
AND wp_posts.post_type = 'post'
AND (wp_posts.post_status = 'publish')
ORDER BY wp_posts.post_date DESC
LIMIT 18310, 5;
我創建了wp_posts
覆蓋唯一索引post_date, post_status, post_type and post_id
並重新啓動MySQL的但是當我運行解釋使用的指標是
status_password_id
,並在可能的密鑰我的新指數甚至沒有出現,雖然這是一個覆蓋索引例如我剛剛得到
type_status_date,status_password_id
因此無論是使用索引或可能的選擇「優化器」,如果MySQL有一個是甚至考慮以post_date作爲第一列的索引。我本來以爲一個查詢,基本上是做日期頂部和排序與
ORDER BY wp_posts.post_date DESC LIMIT 18310, 5;
會希望使用日期速率大小的指標,特別是那種把所有滿足查詢所需的其他領域它呢?
MySQL是否提供查詢提示來強制索引用於速度/性能測試,或者是否有其他事情我需要做,以瞭解爲什麼忽略此索引。
我很喜歡它,如果Navicat有一個像MS SQL的可視化查詢執行計劃,但它似乎是EXPLAIN是它提供的最好的。
任何人有任何提示我如何強制索引被使用或解決爲什麼被忽略將是非常有益的!
感謝
你可以嘗試改變你的索引def wp_posts到'post_type,post_status,post_date,post_id'的順序 –
@IanKenney你應該發佈這個答案。這個索引將被使用(不需要提示),並且查詢將盡可能高效(考慮到相當大的偏移量)。 –