如何写出高效的sql脚本

如何写出高效的sql脚本

ID:18002264

大小:59.50 KB

页数:20页

时间:2018-09-12

如何写出高效的sql脚本_第1页
如何写出高效的sql脚本_第2页
如何写出高效的sql脚本_第3页
如何写出高效的sql脚本_第4页
如何写出高效的sql脚本_第5页
资源描述:

《如何写出高效的sql脚本》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、如何写出高效的SQL脚本:如何写出高效的SQL脚本《二》1.        设计如何满足SARG形式的SQL脚本SARG的定义:用于限制搜索的一个操作,因为它通常是指一个特定的匹配,一个值得范围内的匹配或者两个以上条件的AND连接。[可以理解为索引扫描]形式如下:列名操作符<常数或变量>或<常数或变量>操作符列名列名可以出现在操作符的一边,而常数或变量出现在操作符的另一边。如:Name=’ATA’数量>50005000<数量Name=’ATA’and数量>5000如果一个表达式不能满足SARG的形式,那它就无法限制搜索的范围了,也就是SQL

2、SERVER必须对每一行都判断它是否满足WHERE子句中的所有条件。所以一个索引对于不满足SARG形式的表达式来说是无用的2.        LikeLike语句是否属于SARG取决于所使用的通配符的类型如:namelike‘ATA%’,这就属于SARG5.1-9,,services,andmakethecitymoreattractive,strengtheningpublictransportinvestment,establishedasthebackboneoftheurbanrailtransitmulti-level,multi

3、-functionalpublictransportsystem,thusprotectingtheregionalpositionandachieve而:namelike‘%ATA’,就不属于SARG。原因是通配符%在字符串的开头使得索引无法使用。3.        OR 和 INor会引起全表扫描Name=’ATA’and数量>5000符号SARG,而:Name=’ATA’or数量>5000则不符合SARG。使用or和In会引起全表扫描4.     非操作符、函数引起的不满足SARG形式的语句不满足SARG形式的语句最典型的情况就是包括

4、非操作符的语句,如:NOT、!=、<>、!<、!>、NOTEXISTS、NOTIN、NOTLIKE,isnull,notnull等,另外还有函数。下面就是几个不满足SARG形式的例子:ABS(数量)<5000Namelike‘%ATA’有些表达式,如:WHERE数量*2>5000SQLSERVER也会认为是SARG,SQLSERVER会将此式转化为:WHERE数量>2500/2不推荐这样使用,因为有时SQLSERVER不能保证这种转化与原始表达式是完全等价的。5.      函数charindex()、前面加通配符%的LIKE,后面加%的效

5、率比较如果在LIKE前面加上通配符%,那么将会引起全表扫描,所以其执行效率是低下的。用函数charindex()来代替LIKE速度会有大的提升的说法不对的,测试如下:5.1-9,,services,andmakethecitymoreattractive,strengtheningpublictransportinvestment,establishedasthebackboneoftheurbanrailtransitmulti-level,multi-functionalpublictransportsystem,thusprotect

6、ingtheregionalpositionandachieve1.     selectfcandidateid,fcandidatenamefromtcandidatewherefcandidatenamelike'Tim%'用时:36秒,记录结果数:200万2.     selectfcandidateid,fcandidatenamefromtcandidatewhere charindex('Tim',fcandidatename)>0用时:47秒,记录结果数:200万3.     selectfcandidateid,fcand

7、idatenamefromtcandidatewhere fcandidatenamelike'%Tim%'用时:45秒,记录结果数:200万通过以上3个例子可以看出,再使用Like的时候,后面加“Tim%”符合SARG规则,用时明显少于后两种,后两种的性能基本上差不多如果非的模糊,比如:substring(fcandidatename,1,1)=’A’,那么可以考虑这样:fcandidatenamelike‘A%’来代替(因为这样用的是索引扫描,不是表扫描)如何写出高效的SQL脚本《二》6.      字段提取要按照“需多少、提多少”的原

8、则,避免“select*“下面我来做一个测试:a)     selectfcandidateid,fcandidatenamefromtcandidatewhere fcandi

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。