我之前也有这个疑惑 比如说 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 的记录很少,后面两个添加的筛选范围很大
应该是一样的效率 2005以后SQL优化查询 会自动生成最优化的查询计划
结论:对于select ... where ... 类型的语句。对于OR条件,需要把命中率高的条件放在前面,应该把容易判断的条件写在前面。大地址写在前,小的写在后边 对于AND条件,需要把条件限制范围小的条件放在前面,它与or相反 所以楼主的题应把 col 放在前面
o5及以后的都没有太大区别了,优化器越来越只能了
2、where后,前后不是关键吧!
个人观点,仅作参考!
比如说
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 的记录很少,后面两个添加的筛选范围很大
2005以后SQL优化查询 会自动生成最优化的查询计划
对于AND条件,需要把条件限制范围小的条件放在前面,它与or相反
所以楼主的题应把 col 放在前面
至少是2005裏面,,
不過養成過濾大量的語句寫前面,按索引順序寫沒啥壞處,畢竟我們縂有接觸到2000的時候,而且天知道MS在那個自動優化裏面搞了什麽鬼,,,真那麽萬能,他也就不用提供什麽強制使用艘因什麽東東了,,,
還是得看具體的條件,,,實際情況,,,加反復的對一個語句進行測試比較 過於依賴經驗是不好的,,畢竟MSSQL不是開源的