闲谈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高斯模型
int main(int argc, char** argv) { //std::string videoFile = "E:\\C_VC_code\\Text_Photo\\dingdan ...
- OpenCV摄像头人脸识别
注: 从外设摄像装置中获取图像帧,把每帧的图片与人脸特征进行匹配,用方框框住识别出来的人脸 需要用到的函数: CvHaarClassifierCascade* cvLoadHaarClassifier ...
- ubuntu 安装mysql
1.检查是否已经安装mysql netstat -tap | grep mysql 2.安装mysql 2.1 先更新下软件列表 :sudo apt-get update 2.2 安装mysql :s ...
- jdk 1.7 在ubuntu 环境配置
在/opt/里解压了jdk 1.7后 设置环境变量 chen@caicai ~ $ vim .profile export JAVA_HOME=/opt/jdk1..0_79 export JRE_H ...
- Hifiman:一个国产音频厂商的忧伤[转]
一则苹果计划32亿美元收购音频设备厂商Beats的消息,让音频设备——这个极少被人们重视又时刻离不开的产品重新引发了关注. 国产数码品牌通常都被自然的贴上低端.低质的标签.然而难能可贵的是,国产音频设 ...
- Thinkphp .htaccess 与 httpd.ini文件重定向转换问题
.htaccess 文件内容 RewriteEngine OnRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !- ...
- [转]JVM内存堆布局图解分析
JAVA能够实现跨平台的一个根本原因,是定义了class文件的格式标准,凡是实现该标准的JVM都能够加载并解释该class文件,据此也可以知道,为啥Java语言的执行速度比C/C++语言执行的速度要慢 ...
- CLR环境中内置了几个常用委托(转)
CLR环境中给我们内置了几个常用委托Action. Action<T>.Func<T>.Predicate<T>,一般我们要用到委托的时候,尽量不要自己再定义一 个 ...
- LIGHTSWITCH 连接 MYSQL,中文字符不能保存----解决方法。
使用:dotConnect for MySQL () 作为 数据库连接的PROVIDER , 在 LIGHTSWITCH 中 引用外部的MYSQL 数据源. http://www.devart.co ...
- yum安装所需要的开发库
yum groupinstall "Development tools" -y yum install zlib-devel bzip2-devel openssl-devel n ...