TSQL相关:
1:不要对数据域做预算
select [title] from [person].[contact]where [lastname]=@1and [firstname]=@2
select [title] from [person].[contact]where (([lastname]+@1)+[firstname])=@2
ctrl+L 从查询计划的图标中可以看出明显的差异,原因SARG的写法可以让查询分析优化程序可以直接对比条件常量,可以有效的建立在lastname上的索引,而非SARG则因为需要才知道数据是否符合,导致无法直接使用索引,因而采用群集索引扫描。
2:勿负向查询
负向操作如NOT,<>,!=,!>,!<,not exists,not in ,not like等。原因为:通过索引顺序的结构,sql server可以有效地使用二分查找,快速找到对等的数据,反则,只好扫描所有数据。
实例:
select salesorderId from saleorderdetails where speclalofferid<>2
select salesorderId from saleorderdetails where speclalofferid>2 or speclalofferid<2
效率是不一样的。
3:勿在where子句对字段使用函数
--非SARG
select * from employee where subsrting(lastName,1,1)='D'
--SARG
select * from employee where lastName like 'D%'
4:小心使用or操作
在使用or布尔操作的时候,多个条件中若有一个条件没有合适的索引,则其他再多的字段有索引也是没有用的,只有整个数据库表或集群索引扫描一遍,才确定全部的数据是否有符合的记录。