表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的效率有优于全连接。请教下原理,为啥是这样的呢?

解决方案 »

  1.   

    select * from talbe b where exists(select 1 from table a where b.Id = A.id)exisits与数据量有关系,你改成上的SQL执行,效率就会快很多了
      

  2.   

    关于IN和EXISTS,IN是把内表和外表做HASH连接,则EXISTS是对外表做LOOP循环,每次LOOP循环再对内表进行查询。如果内表和外表大小相当,则使用IN和EXISTS效率差不多少。
    如果子查询的表大,则使用EXISTS,如果子查询表小,则使用IN效率高。全连接进行是与IN相同的HASH连接。