如何写出高效的SQL脚本.docVIP

  • 2
  • 0
  • 约1.26万字
  • 约 20页
  • 2016-04-13 发布于浙江
  • 举报
如何写出高效的SQL脚本

如何写出高效的SQL脚本:如何写出高效的SQL脚本《二》 1.???????? 设计如何满足SARG形式的SQL脚本 SARG的定义:用于限制搜索的一个操作,因为它通常是指一个特定的匹配,一个值得范围内的匹配或者两个以上条件的AND连接。[可以理解为索引扫描]形式如下: 列名 操作符 常数 或 变量 或 常数 或 变量 操作符列名 列名可以出现在操作符的一边,而常数或变量出现在操作符的另一边。如: Name=’ATA’ 数量5000 5000数量 Name=’ATA’ and 数量5000 如果一个表达式不能满足SARG的形式,那它就无法限制搜索的范围了,也就是SQL SERVER必须对每一行都判断它是否满足WHERE子句中的所有条件。所以一个索引对于不满足SARG形式的表达式来说是无用的 2.???????? Like Like语句是否属于SARG取决于所使用的通配符的类型 如:name like ‘ATA%’ ,这就属于SARG 而:name like ‘%ATA’ ,就不属于SARG。 原因是通配符%在字符串的开头使得索引无法使用。 3.???????? OR 和 IN or 会引起全表扫描 Name=’ATA’ and 数量5000 符号SARG,而:Name=’ATA’ or 数量5000 则不符合SARG。使用or和In会引起全表扫描 4.????? 非操作符、函数引起的不满足SARG形式的语句 不满足SARG形式的语句最典型的情况就是包括非操作符的语句,如:NOT、!=、、!、!、NOT EXISTS、NOT IN、NOT LIKE,is null, not null等,另外还有函数。下面就是几个不满足SARG形式的例子: ABS(数量)5000 Name like ‘%ATA’ 有些表达式,如: WHERE 数量*25000 SQL SERVER也会认为是SARG,SQL SERVER会将此式转化为: WHERE数量2500/2 不推荐这样使用,因为有时SQL SERVER不能保证这种转化与原始表达式是完全等价的。 5.?????? 函数charindex()、前面加通配符%的LIKE,后面加%的效率比较 如果在LIKE前面加上通配符%,那么将会引起全表扫描,所以其执行效率是低下的。用函数charindex()来代替LIKE速度会有大的提升的说法不对的,测试如下: 1.????? select fcandidateid,fcandidatename from tcandidate where fcandidatename like Tim% 用时:36秒,记录结果数:200万 2.????? select fcandidateid,fcandidatename from tcandidate where? charindex(Tim,fcandidatename)0 用时:47秒,记录结果数:200万 3.????? select fcandidateid,fcandidatename from tcandidate where? fcandidatename like %Tim% 用时:45秒,记录结果数:200万 通过以上3个例子可以看出,再使用Like的时候,后面加“Tim%”符合SARG规则,用时明显少于后两种,后两种的性能基本上差不多 如果非的模糊,比如:substring(fcandidatename,1,1)=’A’,那么可以考虑这样:fcandidatename like ‘A%’来代替(因为这样用的是索引扫描,不是表扫描) 如何写出高效的SQL脚本《二》 6.?????? 字段提取要按照“需多少、提多少”的原则,避免“select *“ 下面我来做一个测试: a)????? select fcandidateid,fcandidatename from tcandidate where? fcandidatename like Tim% 用时:35秒 记录结果数:200万 b)????? select fcandidateid,fcandidatename,fCredentialsID,fbirthday from tcandidate where? fcandidatename like Tim% 用时:51秒记录结果数:200万 c)????? select fcandidateid from tcandidate where? fcandidatename like Tim% 用时:23秒 记录结果数:200万 由此看来,我们每少提取一个字段,数据的提取速度就会有相应的提升,当然提升的速度还要

文档评论(0)

1亿VIP精品文档

相关文档