sql server 海量数据速度提升:SQL优化-索引(7) 【转】

介绍完SARG后,我们来总结一下使用SARG以及在实践中遇到的和某些资料上结论不同的经验:

  1、Like语句是否属于SARG取决于所使用的通配符的类型

  如:name like ‘张%’ ,这就属于SARG

  而:name like ‘%张’ ,就不属于SARG。

  原因是通配符%在字符串的开通使得索引无法使用。

  2、or 会引起全表扫描

  如:Name=’张三’ and 价格>5000 符号SARG,

  而:Name=’张三’ or 价格>5000 则不符合SARG。

  使用or会引起全表扫描。

  3、非操作符、函数引起的不满足SARG形式的语句

  不满足SARG形式的语句最典型的情况就是包括非操作符的语句,如:NOT、!=、<>、!<、!>、NOT EXISTS、NOT IN、NOT LIKE等,另外还有函数。下面就是几个不满足SARG形式的例子:

  ABS(价格)<5000

  Name like ‘%三’

  有些表达式,如:

  WHERE 价格*2>5000

  SQL SERVER也会认为是SARG,SQL SERVER会将此式转化为:

  WHERE 价格>2500/2

  但我们不推荐这样使用,因为有时SQL SERVER不能保证这种转化与原始表达式是完全等价的。

  4、IN 的作用相当与OR

  语句:

  Select * from table1 where tid in (2,3)

  和

  Select * from table1 where tid=2 or tid=3

  是一样的,都会引起全表扫描,如果tid上有索引,其索引也会失效。

文章出处:http://blog.csdn.net/cuizm/article/details/4498974

posted @ 2012-02-22 10:51  zrj531  阅读(321)  评论(0编辑  收藏  举报