b有近千万条数据还用in?用exists或者左连接,推荐后者,应该快多了

解决方案 »

  1.   

    补充一点:表A中任一条记录对应表B中多条记录,并且这种对应关系中表B中的
              满足b3=‘testb3‘只有一条,简而言之,一条表A中的记录对应一条表B中
              一条b3=testb3‘的纪录.
      

  2.   

    select A.*
        from A,
            (select B.a1 from B 
                 where B.b1 like 't%' and B.b2 = '20060116' and B.b3 = 'testb3') B
        where A.a1=B.A1)
      

  3.   

    to bobfang:
       不需要在设A的 这2个条件了吗?
       A.a1 like 't%'and A.a2 = '20060116'
      

  4.   

    select A.*
        from A,
            (select B.a1 from B 
                 where B.b1 like 't%' and B.b2 = '20060116' and B.b3 = 'testb3') B
        where A.a1=B.a1
      

  5.   

    按照你前面所说的“b1=a1加上某个字符”,由于b1已经是like 't%'了,所以a1必然满足“A.a1 like 't%'”。
    又,你说“保证表A和表B相关联的纪录在同一分区内”,所以条件A.a2 = '20060116'也可以省。
    但如果A表的索引也是分区的,那么需要加上A.a2 = '20060116'。