SQL Server 查询性能优化 相关文章

来自:

SQL Server 查询性能优化——堆表、碎片与索引(一)

SQL Server 查询性能优化——堆表、碎片与索引(二)

SQL Server 查询性能优化——覆盖索引(一)

SQL Server 查询性能优化——覆盖索引(二)

SQL Server 查询性能优化——创建索引原则(一)

SQL Server 查询性能优化——创建索引原则(二)

SQL Server 查询性能优化——索引与SARG(一)

SQL Server 查询性能优化——索引与SARG(二)

SQL Server 查询性能优化——索引与SARG(三)

SQL Server 查询性能优化——索引与SARG(四)

简记

SARG的定义:用于限制搜索的一个操作,因为它通常是指一个特定的匹配,一个值得范围内的匹配或者两个以上条件的AND连接。SARG 包含常量描述式(或是可以解析成常量的变量)来与数据表中的字段做比较。SARG 的格式是:

列名 操作符 <常数 或 变量

<常数 或 变量操作符 列名 

列名出现在操作符的一边,而常量或变量出现在另一边。如果列名同时出现在操作的两边就不算是SARG。

SARG包含以下操作符=、>、<、>=、<=、BETWEEN及部分情况下的LIKE。LIKE是否符合SARG,要看通配符%所在的位置。例如:LIKE '胡%'就是符合SARG,但是'%胡'就不符合SARG。因为以通配符开头无法限制SQL SERVER查询记录的数量,索引的摆放依然是以小到大,或以大到小顺序排列,如果以通配符“%”开头就无法利用有序的结构,以二分法来快速查找数据。

1、 不要对WHERE子句做运算
先以简单的范例来比较SARG 和非SARG ,你可以通过Managemenet studio来查看查询优化程序是否可以有效分析该语句。

 

2  请不要进行负向查询

 

除了不应该对字段数据进行计算外,非SARG 语句的格式语句还包含在WHERE条件子句中,使用负向查询操作符。 

 

如NOT 、!=、<> 、!>、!<、NOT EXISTS 、NOT IN及NOT LIKE 等,因为通过有顺序的索引结构,SQL SERVER 可以有效地利用二分法进行查找,快速找到相应的数据,但是如果查询条件是不要什么数据,其余的都要(就是负向查询), 则 无法利用索引进行二分查找,只能进行全表扫描或聚集索引扫描。

 

以下同样是负向操作健立的SARG 条件查询与非SARG 条件查询范例。从中可以看出两者的执行成本是不一样的,相差十倍左右,但是其数据查询的记录数量也不一样。个人理解查询优化程序是根据数据查询的记录数量,来决定使用哪种执行计划。

3 不要在WHERE子句中对字段使用函数

在查询语句中对字段使用函数,就是对字段数据进行计算,所以这些都不算是SARG。使用函数之后 ,SQL SERVER 需要将数据表内所有记录的相关字段输入到函数中,如果有100万条记录,就需要调用函数100万次,这将是性能杀手。

 

 

原文地址:https://www.cnblogs.com/xcsn/p/4929724.html