![[计算机]sql语句优化.doc_第1页](http://file.renrendoc.com/FileRoot1/2019-1/8/33bc8776-27b9-4cf8-a0b4-545348017e24/33bc8776-27b9-4cf8-a0b4-545348017e241.gif)
![[计算机]sql语句优化.doc_第2页](http://file.renrendoc.com/FileRoot1/2019-1/8/33bc8776-27b9-4cf8-a0b4-545348017e24/33bc8776-27b9-4cf8-a0b4-545348017e242.gif)
![[计算机]sql语句优化.doc_第3页](http://file.renrendoc.com/FileRoot1/2019-1/8/33bc8776-27b9-4cf8-a0b4-545348017e24/33bc8776-27b9-4cf8-a0b4-545348017e243.gif)
![[计算机]sql语句优化.doc_第4页](http://file.renrendoc.com/FileRoot1/2019-1/8/33bc8776-27b9-4cf8-a0b4-545348017e24/33bc8776-27b9-4cf8-a0b4-545348017e244.gif)
![[计算机]sql语句优化.doc_第5页](http://file.renrendoc.com/FileRoot1/2019-1/8/33bc8776-27b9-4cf8-a0b4-545348017e24/33bc8776-27b9-4cf8-a0b4-545348017e245.gif)
已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
sql 语句优化1. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num=03.应尽量避免在 where 子句中使用!=或操作符,否则将引擎放弃使用索引而进行全表扫描。4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num=10 or num=20可 以这样查询:select id from t where num=10union allselect id from t where num=205.in 和 not in 也要慎用,否则会导致全表扫描,如:select id from t where num in(1,2,3)对于连续的数值,能用 between 就不要用 in 了:select id from t where num between 1 and 36.下面的查询也将导致全表扫描:select id from t where name like %abc%若要提高效率,可以考虑全文检索。7.如果在 where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然 而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描:select id from t where num=num可以改为强制查询使用索引:select id from t with(index(索引名) where num=num8.应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:select id from t where num/2=100应 改为: select id from t where num=100*29.应尽量避免在where子句中对字段进行函数 操作,这将导致引擎放弃使用索引而进行全表扫描。如:select id from t where substring(name,1,3)=abc-name以abc开头的idselect id from t where datediff(day,createdate,2005-11-30)=0-2005-11-30生成的id应改为:select id from t where name like abc%select id from t where createdate=2005-11-30 and createdate=convert(varchar(10),GETDATE()-1,120) 32. 33. setstatistics io off 34. 35. -(0 行受影响) 36. 37. -表Worktable。扫描计数0,逻辑读取0 次,物理读取0 次,预读0 次,lob 逻辑读取0 次,lob 物理读取0 次,lob 预读0 次。 38. 39. -表User。扫描计数1,逻辑读取3 次,物理读取1 次,预读0 次,lob 逻辑读取0 次,lob 物理读取0 次,lob 预读0 次。40.21 尽量使用exists代替select count(*)来判断是否存在记录优化器优化exists谓词时优化器支持短路 (short-circuiting)功能。只要找到一行,不需要再扫描其他行就可以确定该表是否包含行了。count函数只有在统计表中所有行 数时使用, count(1)、count(?)、count(*)哪个效率高的问题,经过测试堆、利用聚集索引、非聚集索引三种情况下这三个的执行效率基本上一样, 生成的查询计划是相同的。22注意insert、update操作的数据量,防止与其他应用冲突。如果数据量超过一定的数据页面,系统将会进行锁升级,页级锁会升级成表级 锁。23关于涉及tempdb的使用方面临时表和表变量被物理的保存在tempdb中,除此之外,SQL Server还为很多隐式操作在tempdb中存储数据。包括:作为查询执行计划的一部分的脱机数据,排序,以及维护行版本(2005)。所以 tempdb可能会成为瓶颈。1. 尽量少的使用distinct、order by、group by、having、join,因为这些语句会加重tempdb的负担。2. 避免频繁创建和删除临时表,减少系统表资源的消耗。3. 在新建临时表时,如果一次性插入数据量很大,那么可以使用select into代替create table,避免log,提高速度;如果数据量不大,为了缓和系统表的资源,建议先create table,然后insert。4. 如果临时表的数据量较大,需要建立索引,那么应该将创建临时表和建立索引的过程放在单独一个子存储过程中,这样才能保证系统能够很好的使用到该临时表的索 引。5. 如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先truncate table,然后drop table,这样可以避免系统表的较长时间锁定。6. 慎用大的临时表与其他大表的连接查询和修改,减低系统表负担,因为这种操作会在一条语句中多次使用tempdb的系统表。24关于索引的使用方面1. 尽可能的使用索引字段作为查询条件,尤其是聚集索引,必要时可以通过index index_name来强制指定索
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年二季度院感考试题含答案
- 2025年新版中级汽车维修工考试题库答案
- 安徽六区联考试卷及答案
- 热力学定律考试题及答案
- 用电安全考试题库及答案
- 港航信息技术考试题及答案
- 课件中文字的使用
- 护士中心血站考试题库及答案
- 课件与直播的结合
- 课件与Excel公式使用
- 2025年上半年浙江省宁波慈溪观海卫镇人民政府招聘编外13人易考易错模拟试题(共500题)试卷后附参考答案
- 2025年教资初中体育试题及答案
- 电子产品仓库管理制度
- 女性私密项目培训
- 跨境电子商务课件2024新版
- 智慧税务知识培训课件
- 2024影视项目联合出品与剧本开发合作协议范本3篇
- DB51T 2616-2019 机关会议服务规范
- 乡村文旅规划
- 广东省普通高中学科教学水平评估指标详述
- 污水处理厂人员培训方案
评论
0/150
提交评论