比如
select * from tbname
where col='1' and col='2'假如条件col='2'的结果最少,把col='2'放到col='1' 前面会不会快一些?

解决方案 »

  1.   

    老问题不会SQL Server的计划生成是基於成本的,不是基於规则的
      

  2.   

    sql2005 以前的版本会有影响,
    o5及以后的都没有太大区别了,优化器越来越只能了
      

  3.   

    1、楼主这个句子能得出结果吗?
    2、where后,前后不是关键吧!
    个人观点,仅作参考!
      

  4.   

    我之前也有这个疑惑
    比如说
    select * from tb where id = 1 and  num  between 1 and 100000 and time >='002-02-01'
    --是不是就会比
    select * from tb where num  between 1 and 100000 and time >='002-02-01' and  id = 1 
    --效率高很多 
    --假定id=1 的记录很少,后面两个添加的筛选范围很大
      

  5.   

    应该是一样的效率
    2005以后SQL优化查询 会自动生成最优化的查询计划 
      

  6.   

    结论:对于select ... where ... 类型的语句。对于OR条件,需要把命中率高的条件放在前面,应该把容易判断的条件写在前面。大地址写在前,小的写在后边
    对于AND条件,需要把条件限制范围小的条件放在前面,它与or相反
    所以楼主的题应把 col 放在前面
      

  7.   

    手误,打错了后面的哪个应该是col2='2'但是相信大家都能看懂。
      

  8.   

    看来SQL2K还是有区别的。谢谢。
      

  9.   

    如果有,就是sql server 又需要改进了。
      

  10.   

    應該和上面大爺們所說,,,應該不會影響
    至少是2005裏面,,
    不過養成過濾大量的語句寫前面,按索引順序寫沒啥壞處,畢竟我們縂有接觸到2000的時候,而且天知道MS在那個自動優化裏面搞了什麽鬼,,,真那麽萬能,他也就不用提供什麽強制使用艘因什麽東東了,,,
    還是得看具體的條件,,,實際情況,,,加反復的對一個語句進行測試比較  過於依賴經驗是不好的,,畢竟MSSQL不是開源的