in最后还是要被转成or语句,如果你的in项目太多,建议你把这900项先放到一个临时表(逻辑意义上的临时表),把两个表做连接.

解决方案 »

  1.   

    对 in和or效率上没多少差别 不过我觉得900 个应该不会那么慢 你可以用楼主的建议试一下
    select * from table1 where item1 in ( select name from temp_table );
    应该说很快的速度 这样的查询
      

  2.   

    in 能不用就不要去用,关联的话,最好也使用主键、索引为关联字段。select * 
    from table1,temp_table 
    where table1.item1 = temp_table.name
      

  3.   

    把900多个项目登陆到临时表,就不用费时间吗?
    感觉把900多个项目做insert操作,再加上表连接检索。加起来比 in(900多个项目)更费时间呢?
      

  4.   

    我是说你不要用in方式查询,而是做表连接最快,绝对是比in(900多个项目)更省时间.
    先把900个用sqlloader插入一个临时用的表,要得了多久呢.
      

  5.   

    to cenlmmx(学海无涯苦作舟)
    首先这900多个项目是存在于内存中,不是文件,sqlloader不能用
    其次900多个项目就意味着执行 900多次的insert操作 加上 建立临时表的时间 加上 连接查询的时间真的会比 in(900多个项目)花费时间短吗?总觉得不大可能呢
    如 
    //建立临时表
    create Temp Table tableTemp;
    for(int i=0; i<900; i++) {
      insert  tableTemp values (项目值i)
    }
    select ** from a, tableTemp where a.key = tableTemp.key//in方式查询
    select ** from a where key in(项目值1,项目值2.......项目值900)上面两个哪一个更快?
      

  6.   

    select ** from a, tableTemp where a.key = tableTemp.key
    方式效率高,Temp 表的数据量越大越明显,(为提高效率,将Temp表中的key设置为主键或索引)。不得不用in的情况下,in后面sql中加上order by,效果“大多数”(不是绝对的)情况下也会提高一些。
      

  7.   

    怎么都不看看问题
    我当然知道select ** from a, tableTemp where a.key = tableTemp.key
    方式效率高了那不是得把数据先做insert操作麻
    insert就不算时间啊
    清仔细看看问题再回答
      

  8.   

    请问诸位 select ** from  两个* 是什么用法呀,我本以为笔误,但发现好几个人都这么用,好奇
      

  9.   

    in 的效率比较低,向提高效率用exists替换
      

  10.   

    To:kingofworl(良辰美景虚度)
    好像没有两个*用法,大概是代码Copy造成的:)
      

  11.   

    如果你的in里面项不会超过1000的话,就用in吧。那个 “select ** ”显然是有人急着回答问题,copy别人的