在没有索引的情况下select * from tb where col1=a   --a
select * from tb where col1=a or col2=b   --b上面b句的执行时间理论上是a句的2倍么?

解决方案 »

  1.   

    select * 
    from tb where 
    col1 in ('a','b')

    select * from tb where col1=a or col2=b  
      

  2.   

    我觉得差不多, 都是全表扫描,都是扫描一遍就完成了。只不过前者是一个匹配条件,后者是两个匹配条件。SQL Server应该不会傻到去两个条件各扫描一遍的。
      

  3.   

    如果col1上存在索引,则第一句快.
    如果col1上没有索引,col2有索引,则数据量大一点的话,第二句应该快.
    如果都没有建索引,则两句效率应该一样.都是遍历一遍所有数据.
      

  4.   


    那么在都没有索引的情况下,执行后面带一个条件的肯定是慢于带N个or连接的条件的吧,只不过不会慢N倍,是这样理解的么 ?
    那如果有一张表,要从里面选几条记录转移到另一张表里,除了先insert +条件,然后delete +条件以外,有没有什么更快的方法的呢
      

  5.   

    SQLSERVER数据库上及时col1上建立了索引,也没有明显的区别,优化器可能回自动挑选一个成本比较小的.