SQL Server 索引结构及其使用(二) 改善SQL语句

zxd7757

zxd7757

2016-02-19 10:29

今天图老师小编给大家展示的是SQL Server 索引结构及其使用(二) 改善SQL语句,精心挑选的内容希望大家多多支持、多多分享,喜欢就赶紧get哦!
比如:
select * from table1 where name=''zhangsan'' and tID 10000
和执行:
select * from table1 where tID 10000 and name=''zhangsan''   
一些人不知道以上两条语句的执行效率是否一样,因为如果简单的从语句先后上看,这两个语句的确是不一样,如果tID是一个聚合索引,那么后一句仅仅从表的10000条以后的记录中查找就行了;而前一句则要先从全表中查找看有几个name=''zhangsan''的,而后再根据限制条件条件tID10000来提出查询结果。

  事实上,这样的担心是不必要的。SQL SERVER中有一个“查询分析优化器”,它可以计算出where子句中的搜索条件并确定哪个索引能缩小表扫描的搜索空间,也就是说,它能实现自动优化。

  虽然查询优化器可以根据where子句自动的进行查询优化,但大家仍然有必要了解一下“查询优化器”的工作原理,如非这样,有时查询优化器就会不按照您的本意进行快速查询。

  在查询分析阶段,查询优化器查看查询的每个阶段并决定限制需要扫描的数据量是否有用。如果一个阶段可以被用作一个扫描参数(SARG),那么就称之为可优化的,并且可以利用索引快速获得所需数据。

  SARG的定义:用于限制搜索的一个操作,因为它通常是指一个特定的匹配,一个值得范围内的匹配或者两个以上条件的AND连接。形式如下:
列名 操作符 常数 或 变量



常数 或 变量 操作符列名
列名可以出现在操作符的一边,而常数或变量出现在操作符的另一边。如:
Name='张三'

价格5000

5000价格

Name='张三' and 价格5000
  如果一个表达式不能满足SARG的形式,那它就无法限制搜索的范围了,也就是SQL SERVER必须对每一行都判断它是否满足WHERE子句中的所有条件。所以一个索引对于不满足SARG形式的表达式来说是无用的。

  介绍完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 价格*25000

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上有索引,其索引也会失效。
当前1/3页 123下一页
展开更多 50%)
分享

猜你喜欢

SQL Server 索引结构及其使用(二) 改善SQL语句

编程语言 网络编程
SQL Server 索引结构及其使用(二) 改善SQL语句

SQL Server 索引结构及其使用(二)

SQLServer
SQL Server 索引结构及其使用(二)

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

SQL Server 索引结构及其使用(四)

编程语言 网络编程
SQL Server 索引结构及其使用(四)

SQL Server 索引结构及其使用(一)

SQLServer
SQL Server 索引结构及其使用(一)

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

SQL Server 索引结构及其使用(三)

编程语言 网络编程
SQL Server 索引结构及其使用(三)

SQL Server2000 索引结构及其使用

编程语言 网络编程
SQL Server2000 索引结构及其使用

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

从其他电脑访问本机的Mysql的设置方法

从其他电脑访问本机的Mysql的设置方法

QQ非主流分组名称,若、莪还想着迩,莪们还能在爱 - QQ非主流分组

QQ非主流分组名称,若、莪还想着迩,莪们还能在爱 - QQ非主流分组
下拉加载更多内容 ↓