スロークエリログに表示されるクエリにインデックスを追加することで、ハンマーで打たれたワードプレス DB のパフォーマンスを改善しようとしています。
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;
MySQLでカバーする一意のインデックスを作成しwp_posts
てpost_date, post_status, post_type and post_id
再起動しましたが、Explain を実行すると、使用されるインデックスは
status_password_id
可能なキーでは、新しいインデックスは表示されませんが、それはカバーインデックスです。たとえば、取得するだけです
type_status_date,status_password_id
したがって、使用されるインデックスも、MySQL にオプティマイザーがある場合の可能な選択肢も、最初の列として post_date を持つインデックスを考慮していません。基本的にTOPを実行し、日付で並べ替えるクエリを考えていたでしょう
ORDER BY wp_posts.post_date DESC LIMIT 18310, 5;
速度を上げるために日付でソートされたインデックス、特にクエリを満たすために必要な他のすべてのフィールドを含むインデックスを使用したいと思いませんか?
MySQL には、インデックスを速度/パフォーマンス テストに強制的に使用するためのクエリ ヒントがありますか、それとも、このインデックスが無視されている理由を確認するために他に何かする必要がありますか?
Navicat に MS SQL のような Visual Query Execution Plan があればいいのですが、EXPLAIN が最高のようです。
インデックスを強制的に使用する方法、またはインデックスが無視される理由を解明する方法についてのヒントがある人は誰でも非常に役立ちます!
ありがとう