首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用左连接的Mysql查询速度太慢

使用左连接的Mysql查询速度太慢
EN

Stack Overflow用户
提问于 2010-07-16 00:13:34
回答 6查看 26.8K关注 0票数 14

查询:

代码语言:javascript
运行
复制
   select `r`.`id` as `id` 
     from `tbl_rls` as `r` 
left join `tblc_comment_manager` as `cm` on `cm`.`rlsc_id` != `r`.`id`

这两个表都有8k条记录,但是为什么它非常慢,有时需要2-3分钟甚至更多?

天哪,这个查询让mysql服务器宕机了。我马上就回过头来告诉你们:

所有那些建议对列进行索引的人都是正确的。是的,我写的查询是愚蠢和错误的。谢谢指正我。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-07-16 00:20:35

还可以考虑对表进行索引。我们在一个1million+记录表上运行多个左连接,返回结果的时间不超过一两秒。

票数 26
EN

Stack Overflow用户

发布于 2010-07-16 00:15:48

您真的需要!=吗?还是说它应该是=

代码语言:javascript
运行
复制
 select `r`.`id` as `id` from `tbl_rls` as `r` 
  left join `tblc_comment_manager` as `cm` 
on  `cm`.`rlsc_id`!=`r`.`id

这将选择几乎两个表的笛卡尔乘积。(我估计大约有6000万行)

编辑:来自评论的

是,它是“!=”,以匹配不在tblc_comment_manager中的tbl_rls.id

如果您想使用outer join方法,我认为这就是您所需要的。

代码语言:javascript
运行
复制
 select DISTINCT `r`.`id` as `id` from `tbl_rls` as `r` 
  left join `tblc_comment_manager` as `cm` 
on  `cm`.`rlsc_id`=`r`.`id
WHERE `cm`.`rlsc_id` IS NULL

尽管我的偏好通常是

代码语言:javascript
运行
复制
 select `r`.`id` as `id` 
 from `tbl_rls`
 as `r` 
 WHERE NOT EXISTS(
          SELECT * FROM `tblc_comment_manager` as `cm` 
          WHERE  `cm`.`rlsc_id`=`r`.`id)
票数 13
EN

Stack Overflow用户

发布于 2010-07-16 00:19:49

您想选择什么?

如果要查找与其他表中的记录不匹配的tbl_rls记录,请使用此查询

代码语言:javascript
运行
复制
select `r`.`id`
from `tbl_rls` as `r` 
left join `tblc_comment_manager` as `cm` 
    on  `cm`.`rlsc_id`=`r`.`id
where `cm`.`rlsc_id` IS NULL
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3257575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档