SQL Server 索引结构及其使用(二) 改善SQL语句第
在SQL SERVER的广阔世界中,SQL语句的执行常常令许多开发者感到神秘和困惑。他们担心自己的查询会被误解或执行效率低下。事实上,他们的担忧是多余的,因为SQL SERVER中有一个强大的“查询分析优化器”。
当我们考虑例如以下的SQL查询时:
`select from table1 where name='zhangsan' and tID > 10000` 和 `select from table1 where tID > 10000 and name='zhangsan'`。
一些人疑惑这两个查询的执行效率是否相同。如果tID是一个聚合索引,那么查询优化器会自动调整查询策略。对于第一个查询,优化器会先查找所有名为“zhangsan”的记录,然后再根据tID进行筛选;而对于第二个查询,优化器会首先查找tID大于10000的记录,然后再查找这些记录中的“zhangsan”。看似不同的执行顺序,实际上在SQL SERVER中并无显著差异,因为查询优化器会为我们处理这一切。
查询优化器是如何工作的呢?它会查看查询的每个阶段并决定如何限制需要扫描的数据量。如果一个阶段可以被用作扫描参数(SARG),那么就可以利用索引快速获取所需数据。简单来说,SARG是一个用于限制搜索的操作或表达式。它可以帮助我们快速缩小搜索范围,从而利用索引提高查询效率。
关于SARG的一些要点和实践经验:
Like语句是否满足SARG取决于使用的通配符类型。例如,“name like ‘张%'”满足SARG,但“name like ‘%张'”则不满足。这是因为百分号通配符在字符串的开始位置使得无法使用索引。
使用OR可能会引起全表扫描,如“Name='张三' or 价格>5000”。这种查询不符合SARG形式,因此可能会导致效率下降。
不满足SARG形式的语句包括使用非操作符(如NOT、!=、<>等)和函数的语句。例如,“ABS(价格)<5000”和“Name like ‘%三'”都不满足SARG形式。
IN语句的作用相当于OR语句。例如,“Select from table1 where tid in (2,3)”和“Select from table1 where tid=2 or tid=3”都会引起全表扫描,即使tid上有索引,其索引也可能无效。
了解SQL SERVER的查询优化器和SARG的工作原理对于写出高效的SQL查询至关重要。尽管有时查询的顺序看似影响效率,但实际上,查询优化器会自动为我们处理这些问题。我们仍需要谨慎使用不满足SARG形式的语句,因为它们可能会导致效率下降并引发全表扫描。
编程语言
- SQL Server 索引结构及其使用(二) 改善SQL语句第
- Zend Framework生成验证码并实现验证码验证功能(附
- PHP之uniqid()函数用法
- JavaScript之Date_动力节点Java学院整理
- 安全校验Session验证码并避免绕开验证码攻击
- mysql实现设置定时任务的方法分析
- PHP+MySQL删除操作实例
- AngularJS基础 ng-dblclick 指令用法
- 在.net中用CheckBoxList实现单选
- 学习php开源项目的源码指南
- Asp.Net超大文件上传问题解决
- 探讨JavaScript标签位置的存放与功能有无关系
- Rollup处理并打包JS文件项目实例代码
- php给数组赋值的实例方法
- php实例化一个类的具体方法
- PHP实现在数据库百万条数据中随机获取20条记录的