查询:
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服务器宕机了。我马上就回过头来告诉你们:
所有那些建议对列进行索引的人都是正确的。是的,我写的查询是愚蠢和错误的。谢谢指正我。
发布于 2010-07-16 00:20:35
还可以考虑对表进行索引。我们在一个1million+记录表上运行多个左连接,返回结果的时间不超过一两秒。
发布于 2010-07-16 00:15:48
您真的需要!=
吗?还是说它应该是=
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
方法,我认为这就是您所需要的。
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
尽管我的偏好通常是
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)
发布于 2010-07-16 00:19:49
您想选择什么?
如果要查找与其他表中的记录不匹配的tbl_rls记录,请使用此查询
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
https://stackoverflow.com/questions/3257575
复制相似问题