我对SQL性能优化的看法,对我的文章有提议的欢迎评论!
影响你的查询速度的原因是什么?
- 网速不给力,不稳定。
- 服务器内存不够,或者SQL 被分配的内存不够。
- sql语句设计不合理
- 没有相应的索引,索引不合理
- 表数据过大没有有效的分区设计
- 数据库设计太2,存在大量的数据冗余
那我们如何找到速度慢的原因呢?
- 首先你要知道是否跟sql语句有关,确保不是机器开不开机,服务器硬件配置太差,没网你说p啊
- sql server profiler,分析出sql慢的相关语句,就是执行时间过长,占用系统资源,cpu过多的工具
- 然后是这篇文章要说的,sql优化方法跟技巧,避免一些不合理的sql语句,取暂优sql
- 再然后判断是否使用啦,合理的统计信息。
- 确认表中使用啦合理的索引
- 数据太多的表,要分区,缩小查找范围
分析SQL语句执行的时间
1.记录查询时间和cpu占用时间
set statistics time on
select * from DetitalIndex
set statistics time off
2.记录I/O的支配
set statistics io on
select * from dbo.Product
set statistics io off
扫描计数:索引或表扫描次数
逻辑读取:数据缓存中读取的页数
物理读取:从磁盘中读取的页数
预读:查询过程中,从磁盘放入缓存的页数
lob逻辑读取:从数据缓存中读取,image,text,ntext或大型数据的页数
lob物理读取:从磁盘中读取,image,text,ntext或大型数据的页数
lob预读:查询过程中,从磁盘放入缓存的image,text,ntext或大型数据的页数
如果是物理次数和预读次数较多,可以使用索引进行优化。
如果不想使用sql命令去查看这些内容,可以在sqlserver的新建查询中 右击找到查询选项
勾中Set statistics time 与 io 确定即可.
3.查看执行计划
鼠标放到这个图标会出现查询的详细步骤,且看到你哪个sql花费的开销有多大,如果哪个表的占比过大,证明该表的索引设计不对,或者说性能有待提高.
select是一把钢刀,磨好了可秒杀敌军将领!磨不好则是自杀。
1.保证不要出现*,请使用列代替*
2.使用where查询时,尽量避免多余的列
3.使用top 或 distinct 减少多余或重复
(常言道, 什么玩腻都是一把双刃剑)
1.distinct
distinct在查询一个字段或者很少字段的情况下使用,会避免重复数据的出现,给查询带来优化效果。
但是查询字段很多的情况下使用,则会大大降低查询效率。
这个测试结果代表了使用distint,数据库会占用cpu对数据进行筛选。 所以说少用distinct
2.判断表是否存在数据
select count(*) from IndentDetails
select top(1) id from IndentDetails
很显然下面的完胜
3.连接查询优化
select * from (select * from Student) o left join Grade on o.GradeId = Grade.GradeId
select * from (Student s left join Grade g on s.GradeId=g.GradeId)
减少表连接可以提高查询性能,当然这个差距是由数据大小进行扩大的。
修改删除SQL性能优化
如果成群的操作,会造成cpu的利用率过高从而影响其他用户访问数据库.
再如果单个的迭代进行操作,那么效率就太低了.
所以我们采用折中的方式.进行分块操作
delete orderwhere id<1000
delete order where id>=1000 and id<2000
delete orderwhere id>=2000 and id<3000
.....
我对SQL性能优化的看法,对我的文章有提议的欢迎评论!的更多相关文章
- SQL性能优化常见措施(Lock wait timeout exceeded)
SQL性能优化常见措施 目 录 1.mysql中explain命令使用 2.mysql中mysqldumpslow的使用 3.mysql中修改my.ini配置文件记录日志 4.mysql中如何加索引 ...
- SQL性能优化案例分析
这段时间做一个SQL性能优化的案例分析, 整理了一下过往的案例,发现一个比较有意思的,拿出来给大家分享. 这个项目是我在项目开展2期的时候才加入的, 之前一期是个金融内部信息门户, 里面有个功能是收集 ...
- SQL性能优化
引言: 以前在面试的过程中,总有面试官问道:你做过sql性能优化吗?对此,我的答复是没有.一次没有不是自己的错误,两次也不是,但如果是多次呢?今天痛下决心,把有关sql性能优化的相关知识总结一下,以便 ...
- 如何进行正确的SQL性能优化
在SQL查询中,为了提高查询的效率,我们常常采取一些措施对查询语句进行SQL性能优化.本文我们总结了一些优化措施,接下来我们就一一介绍. 1.查询的模糊匹配 尽量避免在一个复杂查询里面使用 LIKE ...
- SQL Select count(*)和Count(1)的区别和执行方式及SQL性能优化
SQL性能优化:http://www.cnblogs.com/CareySon/category/360333.html Select count(*)和Count(1)的区别和执行方式 在SQL S ...
- 如何进行SQL性能优化
在SQL查询中,为了提高查询的效率,我们常常采取一些措施对查询语句进行SQL性能优化.本文我们总结了一些优化措施,接下来我们就一一介绍. 1.查询的模糊匹配 尽量避免在一个复杂查询里面使用 LIKE ...
- 关于SQL性能优化的十条经验
1.查询的模糊匹配 尽量避免在一个复杂查询里面使用 LIKE '%parm1%'—— 红色标识位置的百分号会导致相关列的索引无法使用,最好不要用. 解决办法: 其实只需要对该脚本略做改进,查询速度便会 ...
- ORACLE数据库学习之SQL性能优化详解
Oracle sql 性能优化调整 ...
- SQL 性能优化 总结
SQL 性能优化 总结 (1)选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving ...
随机推荐
- jquery的选择器——[作为学习备用]
1,转载:https://www.cnblogs.com/onlys/articles/jQuery.html jQuery 的选择器可谓之强大无比,这里简单地总结一下常用的元素查找方法 $(&quo ...
- 从BAT这种公司平薪跳槽头条,是否值得?
有一个朋友之前就职于阿里,之前交流关于跳槽的问题,具体是这样的:阿里工作3年,拿到了头条的offer.但是非常纠结要不要接的问题.于是几个朋友聚在了一起讨论了这个问题 而且最近好多读者也在参加面试,接 ...
- jar文件内lib引用的jar插件修改后更新
打包的java服务在第三方jar进行修改后,要更新线上的jar包时,直接替换原有lib引用的jar文件,会造成服务起不来, 可在本地clean install之后,用线上的classes文件夹替换本地 ...
- sklearn.datasates 加载测试数据
数据一:波士顿房价(适合做回归),以后直接用boston标记 这行代码就读进来了boston = sklearn.datasets.load_boston()查询具体数据说明,用这个代码:print ...
- Goland2019.1破解
Goland2019.1破解 Goland2019.1:http://www.jetbrains.com/goland/download/ 破解补丁:https://pan.baidu.com/s/1 ...
- python2用pip进行安装时报错Fatalerrorinlauncher:Unabletocreateprocessusing"
win10下python3和python2共存环境 用pip安装一个包执行pip2 install xxx的时候报错Fatal error in launcher: Unable to create ...
- FoxMail邮件设置
最近部门变动,要求所有的沟通及交流都需要用企业邮箱,对于一般不喜欢看邮箱的我,经常会错过很多邮件.为了统一接收企业邮件及个人邮件,开始使用Foxmail(以前不喜欢整这些东西).下面分享一下FoxMa ...
- BZOJ 4665
orz gery 一发rk1真有趣(其实我没想着常数优化 inline int sqr(int x){return 1ll*x*x%mo;} const int N=2011; int n,a[N], ...
- vue - 新建一个项目
首先: 要先安装node 及 npm Node.js官方安装包及源码下载地址:http://nodejs.org/ 双击安装,在安装界面一直Next 直到Finish完成安装. 打开控制命令行程序(C ...
- vue-router的学习
一.路由的概述. vue-router是vue.js官方的路由插件,它和vue.js是深度集成的,适用于构建单页面.vue的单页面应用是基于路由和组件的,路由是用于设定访问路径,并将路径和组件映射起来 ...