【发布时间】:2011-12-13 07:59:08
【问题描述】:
我网站上的这个查询需要很长时间才能执行。我在我的网站上有一个博客和一个论坛,我已经松散地集成了,所以每个论坛帐户在博客上都有一个帐户,反之亦然。但是每个表中的 user_id 不相关,所以我一直通过用户名加入它们。
SELECT *
FROM comments AS c
INNER JOIN articles AS a ON c.article_id = a.article_id
INNER JOIN user_profiles AS p ON c.user_id = p.user_id
INNER JOIN blog_users AS b ON c.user_id = b.user_id
INNER JOIN forum_users AS f ON b.username = f.username
WHERE a.article_id = :article_id
ORDER BY c.comment_id DESC
LIMIT 0 , 30
当我对查询使用 explain 时,我看到最后一个连接是检查 forum_users 表中的每一行以得出超过 1,000,000 行的结果。两个表的用户名列都被索引,所有表都是 InnoDB。作为一种解决方法,我将每个用户的论坛 user_id 存储在 blog_users 表中,反之亦然,这样我就可以直接加入 user_id,这样查询运行得更快,但我想尽可能避免这样做。有没有办法我可以重新处理查询,以便用户名加入更有效?
【问题讨论】:
-
您可以在该查询上运行
EXPLAIN EXTENDED并发布输出吗?