【发布时间】:2016-06-15 16:18:00
【问题描述】:
这些是 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
不是我在抱怨,而是我想知道为什么在所有WHEREs 都没有使用主键时使用它。即使 wp_postmeta 表中有 1.5 行,此查询也会立即运行。同样有趣的是,只要我添加一个不是 ID 的订单,比如ORDER BY wp_posts.post_date DESC,它就需要 3 秒才能运行。
那么是什么原因导致在上面的查询中使用了主键呢?
【问题讨论】:
-
这是
GROUP BY(也可能是JOIN)。WHEREs 并不是唯一重要的事情。 -
当然,不知道为什么我没看到,谢谢!