这些是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
输出
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
并非我抱怨,但我想知道为什么在所有WHERE
未使用主键时使用主键。即使在wp_postmeta
表中有1.5行,此查询也会立即运行。同样有趣的是,只要我添加不是ID的订单,例如ORDER BY wp_posts.post_date DESC
,它就需要3秒才能运行。
那么是什么原因导致主键在上面的查询中使用?
答案 0 :(得分:0)
我将不再再次公布有关WP的选择词。
请为每个表提供SHOW CREATE TABLE
。如果没有这些信息,我会猜测这是缺失的,但需要:
INDEX(post_type, post_status, ID)
该组合中的前两列' index可以按任意顺序排列。
我已从SELECT部分删除了一些字段,以使问题更简单。 - 您的问题已经失效!现在LEFT JOIN wp_postmeta ON (wp_postmeta.post_id = wp_posts.ID)
完全没用,应该删除。