闲谈SQL脚本优化
摘要:
闲来无事,便想寻找大师级别优化SQL脚本案例,也算是读后留点笔记,摘录内容都会链接到所参考网址,如有冒犯,还望博主见谅;有些文章只有多动手多动脑才能理解其中的意思,看了需要实际操作,才不枉大师们的良苦用心;
一、正确的建立索引 [摘录:我是如何在SQLServer中处理每天四亿三千万记录的]
首先,我们需要明白几个索引的要点:
- 索引之后,按索引字段重复最少的来排序,会达到最优的效果。以我们的表来说,如果建立了No的聚集索引,把No放在where子句的第一位是最佳的,其次是Id,然后是MgrObjId,最后是时间,时间索引如果表是一个小时的,最好不要用
- where子句的顺序决定了查询分析器是否使用索引来查询。比如建立了MgrObjId和Id的索引,那么
where MgrObjId='' and Id='' and Dtime=''
就会采用索引查找,而where Dtime='' and MgrObjId='' and Id=''
则不一定会采用索引查找。 - 把非索引列的结果列放在包含列中。因为我们条件是MgrObjId和Id以及Dtime,因此返回结果中只需包含Dtime和Value即可,因此把Dtime和Value放在包含列中,返回的索引结果就有这个值,不用再查物理表,可以达到最优的速度。
如何在SQLServer中处理亿万级别的数据(历史数据),可以按以下方面进行:
- 去掉表的所有索引
- 用SqlBulkCopy进行插入
- 分表或者分区,减少每个表的数据总量
- 在某个表完全写完之后再建立索引
- 正确的指定索引字段
- 把需要用到的字段放到包含索引中(在返回的索引中就包含了一切)
- 查询的时候只返回所需的字段
二、数据查询优化[摘录:记一次SQLServer的分页优化兼谈谈使用Row_Number()分页存在的问题]
- 在SQLServer中,
ROW_NUMBER
的分页应该是最高效的了,而且兼容SQLServer2005以后的数据库 - 通过“欺骗”查询引擎的小技巧,可以控制查询引擎部分的优化过程
ROW_NUMBER
分页在大页数时存在性能问题,可以通过一些小技巧进行规避- 尽量通过cte利用索引
- 把不参与
where
条件的表放到分页的cte外面 - 如果参与
where
条件的表过多,可以考虑把不参与分页的表先做一个临时表,减少IO - 在较大页数的时候强制使用
hash join
可以减少io,从而获得很好的性能
使用
with(forceseek)
可以强制查询因此进行索引查询
闲谈SQL脚本优化的更多相关文章
- 数据库优化方案之SQL脚本优化
随着数据库数据越来越大,数据单表存在的数据量也就随之上去了,那么怎么样让我们的脚本查询数据更快呢? 在这个地方我们主要提到两个数据库类型: 1.MSSQL(该数据库我们通过执行计划来查看数据库性能在哪 ...
- SQL脚本优化
1.创建索引一.要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引 (1)在经常需要进行检索的字段上创建索引,比如要按照表字段username进行检索,那么就应 ...
- 数据库性能优化常用sql脚本总结
最近闲来无事,正好抽出时间,来总结总结 sql性能优化方面的一下小技巧,小工具.虽然都是些很杂的东西,但是我个人觉得,如果真的清楚了里面的一下指标,或许真的能抵半个DBA. 有些时候,找不到DBA或者 ...
- sql 获取批处理信息的脚本(优化器在处理批处理时所发生的优化器事件)
--获取批处理信息的脚本(优化器在处理批处理时所发生的优化器事件) SET NOCOUNT ON; DBCC FREEPROCCACHE; --清空过程缓存 GO --使用tempdb..Optsta ...
- 【ORACLE】记录通过执行Oracle的执行计划查询SQL脚本中的效率问题
记录通过执行Oracle的执行计划查询SQL脚本中的效率问题 问题现象: STARiBOSS5.8.1R2版本中,河北对帐JOB执行时,无法生成发票对帐文件. 首先,Quartz表达式培植的启 ...
- 如何进行正确的SQL性能优化
在SQL查询中,为了提高查询的效率,我们常常采取一些措施对查询语句进行SQL性能优化.本文我们总结了一些优化措施,接下来我们就一一介绍. 1.查询的模糊匹配 尽量避免在一个复杂查询里面使用 LIKE ...
- Loadrunner VuGen实战---基本组成、录制流程、协议、脚本优化、参数化(三)
一.3大基本组件:VuGen.Controller.Analysis 1.VuGen:录制.编写脚本. 2.Controller:性能测试场景设计以及监控的地方. 3.Analysis:生成图表报告的 ...
- 如何进行SQL性能优化
在SQL查询中,为了提高查询的效率,我们常常采取一些措施对查询语句进行SQL性能优化.本文我们总结了一些优化措施,接下来我们就一一介绍. 1.查询的模糊匹配 尽量避免在一个复杂查询里面使用 LIKE ...
- 关于SQL性能优化的十条经验
1.查询的模糊匹配 尽量避免在一个复杂查询里面使用 LIKE '%parm1%'—— 红色标识位置的百分号会导致相关列的索引无法使用,最好不要用. 解决办法: 其实只需要对该脚本略做改进,查询速度便会 ...
随机推荐
- OpenCV图像的缩放
函数介绍: 1.cvResize 改变图像大小 void cvResize(const CvArr *src, CvArr *dst, int interpolation) 函数说 ...
- bug-android之INSTALL_FAILED_NO_MATCHING_ABIS无法安装在虚拟机
bug描述: 经常在网络上下载一些实例,自己研究 ,运行时不时会出现这个bug: Installation error: INSTALL_FAILED_NO_MATCHING_ABIS bug解决方案 ...
- Arlenmbx!!!!
我无限制的以安逸为想法 其实生活的不安逸 我所做的事情和思路到底正不正确? 我失败了? 我做不到? 我尝试做到? 我可以做到! 我能做到 我做到了我已经做到了 难道想法和现实是有区别的吗 有理想只是空 ...
- jquery 生成table表格 部分代码
想生成上面这样的table表格先看返回数据格式 <div id="create_img_tab"></div> window.onload = functi ...
- Ext treelist 动态切换TreeStore
chooseMenu: function(_this) { //var mycomp = top.Ext.getCmp("my_comp"); var menuTreeStore ...
- 22行Python代码实现 单词纠错
http://norvig.com/spell-correct.html 基本原理就是概率统计,亮点是Python的各种特性作者用得出神入化,尤其是获取与word相距编辑距离为2的所有单词,先找出与w ...
- Java中流的概念
http://wapwenku.baidu.com/view/04714847b307e87101f69656.html?ssid=0&from=1086k&uid=0&pu= ...
- jquery实现input输入框实时输入触发事件代码 ---jQuery 中bind(),live(),delegate(),on() 区别
复制代码 代码如下: <input id="productName" name="productName" value="" /> ...
- Nginx反向代理到Tomcat服务器
在实际生产中,Tomcat服务器一般不单独使用在项目中,对于静态资源的响应Nginx表现的比较好,另外由于nginx是专门用于反向代理的服务器,所以很容易实现将java的请求转发到后端交给tomcat ...
- Python2.7<-------->Python3.x
版本差异 from __future__ Python2.7 Python3.x 除法 / // Unicode u'' ...