- 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万
由此看来,我们每少提取一个字段,数据的提取速度就会有相应的提升,当然提升的速度还要
您可能关注的文档
最近下载
- 2023-2024学年新疆乌鲁木齐市第一中学七年级上学期期末考试英语试卷 含答案.docx VIP
- 2025年辽宁职业学院单招(语文)测试题库新版.docx VIP
- 金属技术监督管理标准.pdf VIP
- 主变培训精品.pptx VIP
- 2025年学校培训初中地理新课标学习解读.pptx VIP
- 市中级人民法院党组2025年度民主生活会对照检查材料(五个带头).docx VIP
- 部编三上道德与法治期末复习填空选择 小学道德与法治试卷.pdf
- 广东省广州市越秀区2023-2024学年五年级上学期期末英语试题.docx VIP
- 2026年海南财金银河私募基金管理有限公司招聘备考题库参考答案详解.docx VIP
- 2020山东青岛中考《英语》试卷+答案+解析.docx VIP
原创力文档

文档评论(0)