2016-06-15 3 views
-1

これらは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秒かかることです。

したがって、上記のクエリで主キーが使用される原因は何ですか?

+2

これは 'GROUP BY'です(おそらく' JOIN'でもあります)。 「WHERE」だけが重要なことではありません。 – ceejayoz

+0

もちろん、私はそれを見なかった理由を知らない、ありがとう! –

答えて

0

私はまだWPに関する選択肢の言葉を吐き出すことをやめます。

各テーブルにSHOW CREATE TABLEを入力してください。

INDEX(post_type, post_status, ID) 

その「複合」索引の最初の2つの列は、いずれの順序で指定できます。その情報がない場合には、私はこれが欠落しているが、必要とされていることを推測します。

質問をより簡単にするために、SELECT部分​​からいくつかのフィールドを削除しました。 - あなたはあなたの質問を無効にしました!今すぐLEFT JOIN wp_postmeta ON (wp_postmeta.post_id = wp_posts.ID)は全く役に立たず、削除する必要があります。

関連する問題