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

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

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
如何写出高效的SQL脚本如何写出高效的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)

cduutang + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档