码迷,mamicode.com
首页 > 其他好文 > 详细

用Left join代替not in

时间:2017-03-14 10:36:27      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:except   数据连接   相对   速度   tar   lan   数据库   class   sel   

很多人都知道 在各种数据库里面 not in 的效率极其低下.例如

 

select * from a

where a.id not in (

      select id from b

)

 

我们假如a表有 10万条记录,

而b表里面也有10万条记录,

那么需要的判断是 10万 乘以 10万 ,则是100亿次判断.所以执行效率极其低下.

即使发现存在就返回.那么也有 100亿/2=50亿次判断.

 

此时,我们可以用 Left join 来进行判断则快很多

 

select a.* from a

left join b

      on a.id=b.id

where b.id is null

 

我相信这句语句大家都看的懂,相对来说.这里只要进行10万数据连接,然后进行10万次判断就可以了.总共只有20万次.

而10万数据连接来说,速度是很快的.

 

100亿/20万 相差 5万倍速度.  

50亿/20万 相差 2.5万倍速度.

 

对于这个来说,假如a 表的数据越多,则提成的越快.

 

当然我这个上面涉及的是 a,b表里面都没有重复的ID,假如涉及到重复的ID.则可以通过 except 等字进行过滤.从而提高连接速度.

而在  distinct  和  left join 之间的效率就需要你的经验来判断了

用Left join代替not in

标签:except   数据连接   相对   速度   tar   lan   数据库   class   sel   

原文地址:http://www.cnblogs.com/yangyi9343/p/6546909.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!