これらはWordPressのポストテーブルですが、その部分は重要ではありません。質問をよりシンプルにするために、SELECT部分からいくつかのフィールドを削除しました。このクエリで主キーが使用されるのはなぜですか?
SELECT wp_posts.ID, wp_posts.post_title
FROM wp_posts LEFT JOIN wp_postmeta ON (wp_postmeta.post_id = wp_posts.ID)
WHERE wp_posts.post_type = 'series'
AND wp_posts.post_status = 'publish'
GROUP BY wp_posts.ID
LIMIT 100, 100;
EXPLAIN
私は文句だけど、すべてWHERE
sがそれを使用していないときに、主キーを使用した理由を、私は思ったんだけどという出力
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE wp_posts index type_status_date PRIMARY 8 NULL 29 Using where
1 SIMPLE wp_postmeta ref post_id post_id 8 db.wp_posts.ID 13 Using index
ありません。このクエリは、wp_postmeta
テーブルの1.5行でも即座に実行されます。興味深いのは、ORDER BY wp_posts.post_date DESC
のように、IDでない注文を追加するとすぐに3秒かかることです。
したがって、上記のクエリで主キーが使用される原因は何ですか?
これは 'GROUP BY'です(おそらく' JOIN'でもあります)。 「WHERE」だけが重要なことではありません。 – ceejayoz
もちろん、私はそれを見なかった理由を知らない、ありがとう! –