两个相同的SQL查询意外的大执行时间

时间:2016-10-22 05:45:02

标签: mysql query-performance

我会很感激有人如何解释我这个案例http://pastebin.com/YBQTwxYG,两个查询几乎相同,但第二个执行ms除了前几乎3分钟。

由于EXPLAIN显示第二个查询使用了正确的索引,但首先不是。

我很困惑。

1 个答案:

答案 0 :(得分:0)

首先是一些格式化:

SELECT  c.`id`, c.`content_id`, c.`author_id`, c.`text`, c.`typotext`,
        c.`created`,
        p.`id`, p.`html_title`, p.`permalink`,
        u.`id`, u.`username`, u.`first_name`, u.`last_name`, u.`avatar`
    FROM  `content_comment` AS c
    INNER JOIN  `content_post` AS p  ON (c.`content_id` = p.`id`)
    INNER JOIN  `post_article` AS a  ON (p.`id` = a.`content_id`)
    LEFT OUTER JOIN  `auth_user` AS u  ON (c.`author_id` = u.`id`)
    WHERE  c.`deleted` IS NULL
      AND  a.`id` IS NOT NULL
    ORDER BY  c.`created` DESC
    LIMIT  15

如果idPRIMARY KEY的{​​{1}},那么它不能是post_article。因此,测试是不必要的。

如果您打算测试NULLauth_user,则不需要id

然后检查您是否有这些复合索引:

LEFT

第二个查询不同,因为它访问c: INDEX(deleted, created) -- in that order a: INDEX(content_id, id) -- in that order 而不是forum_topic。看看这两个表的auth_user可以解释为什么你有不同的解释计划。如果没有,请检查SHOW CREATE TABLE

如果您需要进一步讨论,请为所有5个表格提供SHOW TABLE STATUS