日期:2014-05-17  浏览次数:21127 次

exists和全连接的效率?
表A数据百万以上,表B中50万
exists方式:
select * from talbe A where exists(select 1 from table B where b.Id = A.id)
查询时间两分钟以上
全连接方式

select a.* FROM TABLE A,TABLE B WHERE A.ID = B.ID
查询时间1秒左右。


我一直以为exists的效率有优于全连接。请教下原理,为啥是这样的呢?

------解决方案--------------------
select * from talbe b where exists(select 1 from table a where b.Id = A.id)

exisits与数据量有关系,你改成上的SQL执行,效率就会快很多了
------解决方案--------------------
这两个字段上有无索引呢?我觉得是因为表结构和他们两种查询方式的原理有关系
------解决方案--------------------
关于IN和EXISTS,IN是把内表和外表做HASH连接,则EXISTS是对外表做LOOP循环,每次LOOP循环再对内表进行查询。

如果内表和外表大小相当,则使用IN和EXISTS效率差不多少。
如果子查询的表大,则使用EXISTS,如果子查询表小,则使用IN效率高。

全连接进行是与IN相同的HASH连接。