- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
一、操作符优化
1.IN、NOTIN操作符
IN和EXISTS性能有外表和内表区分的,但是在大数据量的表中推荐用EXISTS代替IN。
NotIN不走索引的是绝对不能用的,可以用NOTEXISTS代替
2.ISNULL或ISNOTNULL操作
索引是不索引空值的,所以这样的操作不能使用索引,可以用其他的办法处理,例如:数字类型,判断大于
0,字符串类型设置一个默认值,判断是否等于默认值即可
3.操作符(不等于)
不等于操作符是不会用到索引的,因此对它的处理只会产生全表扫描。用其它相同功能的操作运算代替,
如a0改为a0ora0a’’改为a’’
4.用全文搜索搜索文本数据,取代like搜索
全文搜索始终优于like搜索:
(1)全文搜索让你可以实现like不能完成的复杂搜索,如搜索一个单词或一个短语,搜索一个与另一个单词或短语
相近的单词或短语,或者是搜索同义词;
(2)实现全文搜索比实现like搜索更容易(特别是复杂的搜索);
二、SQL语句优化
1、在查询中不要使用select*
为什么不能使用,地球人都知道,但是很多人都习惯这样用,要明白能省就省,而且这样查询数据库不能利用“覆
盖索引”了
2.尽量写WHERE子句
尽量不要写没有WHERE的SQL语句
3.注意SELECTINTO后的WHERE子句
因为SELECTINTO把数据到临时表,这个过程会锁定一些系统表,如果这个WHERE子句返回的数据过多或
者速度太慢,会造成系统表长期锁定,诸塞其他进程。
4.对于聚合查询,可以用HAVING子句进一步限定返回的行
5.避免使用临时表
(1)除非却有需要,否则应尽量避免使用临时表,相反,可以使用表变量代替;
(2)大多数时候(99%),表变量驻扎在内存中,因此速度比临时表更快,临时表驻扎在TempDb数据库中,因此临
时表上的操作需要跨数据库通信,速度自然慢。
6.减少数据库的次数:
程序设计中最好将一些常用的全局变量表放在内存中或者用其他的方式减少数据库的次数
7.尽量少做重复的工作
尽量减少无效工作,但是这一点的侧重点在客户端程序,需要注意的如下:
A、控制同一语句的多次执行,特别是一些基础数据的多次执行是很多程序员很少注意的
B、减少多次的数据转换,也许需要数据转换是设计的问题,但是减少次数是程序员可以做到的。
C、杜绝不必要的子查询和连接表,子查询在执行一般解释成外连接,多余的连接表带来额外的开销。
D、合并对同一表同一条件的多次UPDATE,比如
UPDATEEMPLOYEESETFNAME=’HAIWER’WHEREEMP_ID=’VPA30890F’
UPDATEEMPLOYEESETLNAME=’YANG’WHEREEMP_ID=’VPA30890F’
这两个语句应该合并成以下一个语句
UPDATEEMPLOYEESETFNAME=’HAIWER’,LNAME=’YANG’
WHEREEMP_ID=’VPA30890F’
E、UPDATE操作不要拆成DELETE操作+INSERT操作的形式,虽然功能相同,但是性能差别是很大的。
F、不要写一些没有意义的查询,比如
SELECT*FROMEMPLOYEEWHERE1=2
三、where使用原则
1)在下面两条select语句中:
select*fromtable1wherefield1=10000andfield1=0;
select*fromtable1wherefield1=0andfield1=10000;
如果数据表中的数据field1都=0,则第一条select语句要比第二条select语句效率高的多,因为第二条select语句的
第一个条件耗费了大量的系统资源。
第一个原则:在where子句中应把最具限制性的条件放在最前面。
文档评论(0)