使用Left Join的Mysql查询太慢了

Ars*_*eep 8 mysql sql join query-optimization

查询:

   select `r`.`id` as `id` 
     from `tbl_rls` as `r` 
left join `tblc_comment_manager` as `cm` on `cm`.`rlsc_id` != `r`.`id`
Run Code Online (Sandbox Code Playgroud)

两张桌子都有8k记录,但为什么它很慢,有时需要2-3分钟?

OMG,这个查询使mysql服务器失效.会在一秒钟内回复你们的人民:(

建议索引列的所有人都是正确的.是的,我写的查询很愚蠢.谢谢你纠正我.

bpe*_*n76 21

考虑也为您的表编制索引.我们在1百万+记录表上运行多个左连接,返回结果的时间不会超过一秒或两秒.


Mar*_*ith 13

你真的需要!=它还是意味着它=

 select `r`.`id` as `id` from `tbl_rls` as `r` 
  left join `tblc_comment_manager` as `cm` 
on  `cm`.`rlsc_id`!=`r`.`id
Run Code Online (Sandbox Code Playgroud)

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

编辑:来自评论

是的,"!="匹配tbl_rls.id那些不在tblc_comment_manager中

我想如果您想使用这种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
Run Code Online (Sandbox Code Playgroud)

虽然我的偏好通常是

 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)
Run Code Online (Sandbox Code Playgroud)