通过NAME字段条件查询一个数据表,假设我有100个姓名,有以下两个方法,
方法1:
把100个Name 组成一个SQL语句,比如 Select * from tmp_table where Name='张三' or Name ='李四' Or ...Or Name='第一百个姓名'方法2:
通过循环100次,每次执行一个Name条件,执行100个SQL语句
Select * from tmp_table where Name='张三' 
Select * from tmp_table where Name='李四'
......
Select * from tmp_table where Name='第一百个姓名'
这两种方法那个速度更快一些?

解决方案 »

  1.   

    select * from tmp_table where name in(一百个名字)
      

  2.   

    说实在,两种都不好。
    如果只用sql处理,1楼方法好;如果用pl/sql处理,可以用你的方法2,但要使用绑定变量
    Select * from tmp_table where Name=:v_name;
      

  3.   

    to:Phoenix_99
    select * from tmp_table where name in(一百个名字)我记得好像IN 在SQL语句里不是最慢的。不知道是不是
      

  4.   

    我就是用DELPHI编写客户端程序,需要提取这个100个姓名的数据,大家遇到这样的问题都采取什么方法呢?
      

  5.   

    毫无疑问第一种方法,用where name in ()来做,比第二种方法要快不少。
      

  6.   

    使用in,100项是可以的,in的列表项不能超过1000
      

  7.   

    使用绑定变量,估计是最好了。
    to tangren:in的列表项不能超过1000
    学习了,之前一直都没有这样一个概念。
      

  8.   

    in的话效率高,要是你数据量大的话,改成exist会更好
      

  9.   

    to lzbbob1985:
        建立临时表倒是比较好的方法,但是总感觉有点麻烦,需要建表,然后插入100个NAME,然后关联查询,查询完还要删除表,有没有更好的方法呢?
      

  10.   

    另外,IN 和OR 相比,到底是快还是慢?
      

  11.   


    不想建 临时表 那就with table   呵呵  
      

  12.   

    如果你一条SQL多次用到这100个人名,建个临时表和表和很有好处的。
    我个人常碰到这情况,我用PB,我建了一个表,在grid中插入100个人名,先delete table ,再一次update,再查询,再rollback; 
      

  13.   

    我用oracle7,
    with table用不了
      

  14.   


    in跟or效率一样的,只是不同写法而已。