表SIP1
CKBH
1
2
3
4
6
8
..
..
..
..
有5万条
表SIP2
CKBH
1
2
3
5
..
..
..
也有5万条左右
我现在想晓得 在SIP2.CKBH 但是不在 SIP1.CKBHSELECT B.CKBH FROM SIP1 B WHERE B.CKBH NOT IN(SELECT A.CKBH FROM SIP1 A)
两个表对应的字段我设置了唯一索引
但是查询还是太慢怎么查询快点呢??
解决的在加100分

解决方案 »

  1.   

    select CKBH from SIP2 b where not exists(select 1 from SIP1 a where a.CKBH=b.CKBH) 
      

  2.   


    not in效率不高,试试这个:[在SIP2.CKBH 但是不在 SIP1.CKBH]
    SELECT B.CKBH FROM SIP1 A, SIP2 B WHERE B.CKBH = A.CKBH(+) AND A.CKBH IS NULL;
      

  3.   

    SELECT CKBH FROM SIP2 MINUS SELECT CKBH FROM SIP1
      

  4.   

    我现在想晓得 在SIP2.CKBH 但是不在 SIP1.CKBH SELECT B.CKBH FROM SIP1 B WHERE B.CKBH NOT IN(SELECT A.CKBH FROM SIP1 A) 不对吧
    可以试试:  SELECT  CKBH FROM SIP2  minus SELECT CKBH FROM SIP1 
      

  5.   

    SELECT CKBH FROM SIP2 MINUS SELECT CKBH FROM SIP1
      

  6.   


    不会吧? minus这东东效率差的说。4楼的应该不错你的这个A.ckbh可以为null吗?SELECT B.CKBH FROM SIP1 B WHERE B.CKBH NOT IN(SELECT A.CKBH FROM SIP1 A WHERE A.ckbh IS NOT NULL
    加了is not null后,执行计划变不?
      

  7.   

    在SIP2.CKBH 但是不在 SIP1.CKBH SELECT A.CKBH FROM SIP2 A left join SIP1 B on A.CKBH = B.CKBH where B.CKBH IS NULL;
      

  8.   

    select a.ckbh,b.ckbh from sip2 a left join sip1 b on a.ckbh = b.ckbh where b.ckbh is null
      

  9.   

    不要搞的太复杂,
    LZ测试下,我觉得1楼可能要比其它的要快,not exists是能用到索引的.
      

  10.   

    LZ测试好了的话,不妨说下结果,我也好想知道。minus数据量大的时候应该也很好用啊。not exists也可以!有时后not exists也是很慢的。