SQL Server 查询性能优化 相关文章
来自:
SQL Server 查询性能优化——堆表、碎片与索引(一)
SQL Server 查询性能优化——堆表、碎片与索引(二)
简记
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万次,这将是性能杀手。
最新文章
- SerializationUtility
- [HDOJ5791]Two(DP)
- 小白日记18:kali渗透测试之缓冲区溢出实例(二)--Linux,穿越火线1.9.0
- sed线上经典案例之-同时替换多个字符串
- C# select的联动效果
- php 5.3 配置mssql笔记
- Java NIO--初步认识
- ubuntu中文输入问题
- 制作Docker镜像
- ASP.NET Core中使用GraphQL - 最终章 Data Loader
- Python爬虫入门教程 60-100 python识别验证码,阿里、腾讯、百度、聚合数据等大公司都这么干
- 【慕课网实战】九、以慕课网日志分析为例 进入大数据 Spark SQL 的世界
- html2canvas html截图插件
- 何时使用SUM()与SUMX()
- js中的substring
- Could not load file or assembly &#39;Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91&#39; or one of its dependencies
- Qt Creater之hello world
- 【BZOJ2306】幸福路径(动态规划,倍增)
- Atitit.软件gui按钮and面板---通讯子系统(区)-- github 的使用....
- 一些窍门 drawable
热门文章
- 自定义Dialog宽度占满屏幕
- android开发中常见布局的注意点
- 【好书摘要】性能优化中CPU、内存、磁盘IO、网络性能的依赖
- js和jquery获取父级元素、子级元素、兄弟元素的方法
- MongoDB Java Driver
- JavaScript Patterns 4.8 Function Properties - A Memoization Pattern
- Bug #19528825 ";UNABLE TO PURGE A RECORD";
- 简单看看这两个类 String和StringBuilder
- Nginx 简单的负载均衡配置示例(转载)
- android AsyncTask实例