4

我必须在我的网站上运行这个 Mysql 查询来获取大量数据:(3 个表,每个表有 100,000 + 条记录)

SELECT on_resume.*, on_users.subscribed, on_users.user_avatar, on_resume_page.*
FROM on_resume 
LEFT JOIN on_users ON (on_resume.resume_userid = on_users.user_id ) 
LEFT JOIN on_resume_page  ON ( on_resume.resume_userid = on_resume_page.resume_userid)
WHERE on_resume.active= '1' 
GROUP BY on_resume.rid 
ORDER BY on_resume.rid DESC 
LIMIT 0,18

当我在 Phpmyadmin sql 部分运行它时,整个 mysqld 服务将关闭,需要重新启动。

现在我正在测试这个查询,我发现如果我不使用Group by并且Order by条件查询会很好。

SELECT on_resume.*, on_users.subscribed, on_users.user_avatar, on_resume_page.*
FROM on_resume 
LEFT JOIN on_users ON (on_resume.resume_userid = on_users.user_id ) 
LEFT JOIN on_resume_page  ON ( on_resume.resume_userid = on_resume_page.resume_userid)
WHERE on_resume.active= '1' 
LIMIT 0,18

显示第 0 - 17 行(共 18 行,查询耗时 0.4248 秒)

为什么会这样,我该如何解决?...

注意:在任何一种情况下,我都使用 group by 或 Order by 单独测试了 SQL 查询,即使其中一种仍然查询失败并挂起服务器。

编辑:这个问题是通过使列on_resume_page.resume_userid索引来解决的。

4

1 回答 1

0

这是我被告知的,花了一段时间才弄清楚:看看芝加哥评论中的@jer

请记住,当有 GROUP BY 子句时,有一些规则适用于分组列。其中一个规则是“单值规则”——在 SELECT 列表中命名的每一列也必须是一个分组列,除非它是一个集合函数的参数。MySQL 通过允许您在 SELECT 列表中使用未出现在 GROUP BY 子句中的列或计算来扩展标准 SQL。但是,我们被警告不要使用此功能,除非您从 GROUP BY 子句中省略的列在组中不是唯一的,因为您将获得不可预测的结果。

于 2012-12-20T22:44:08.343 回答