如何优化下面sql语句:
    select* from table where id1 in(120,140,499,599,3889,......) 
                             and
                             id2 in(0,48888,399282,27239,......)
这样的语句,in里面的字段都是整型的,id2的in里大概有2000个数,
怎么办???????????

解决方案 »

  1.   

    IN 的效率不会太理想的。一个传统的做法,是把这些值都放到一个临时表中。create table tmp(id integer constraint pk_tmp primary key);然后用联接就行了。
      

  2.   

    是要把id1和id2分别放到两个临时表里吗,
    联结是用union吗?
      

  3.   


    两个临时表。这样速度会快一些。
    联结 可以用JOIN,也可以直接 =
      

  4.   

    1.确保使用的是CBO,因为RBO是没有INLIST ITERATOR的;
    2.建立联合索引在(id1,id2)上。
      

  5.   

    把数放进一个表,然后使用连接.select a.*
    from a,b
    where a.id1 = b.id1 and a.id2 = b.id2
      

  6.   

    in 的结果集不可以用exists表述吗?
      

  7.   

    可是我把数据插入临时表的时间也很慢,要一分钟,用临时表查询是快一些,但加起来的时间也和没有优化前的语句执行时间差不多,我是用ado.addnew----ado.update添加数据的
    还是没有解决,大家再给出出主意呀?