mysql查询性能优化
- 客户端发送查询请求。
- 服务器检查查询缓存,如果命中缓存,则返回结果,否则,继续执行。
- 服务器进行sql解析,预处理,再由优化器生成执行计划。
- Mysql调用存储引擎API执行优化器生成的执行计划进行查询。
- 返回结果。

- 只获取必要的数据:
- 是否查询了多余的记录;
- 多表关联时是否返回了全部列;
- 是否总是取出全部列(避免select *);
- 是否重复查询相同的数据(缓存代替)。
- 避免额外的记录扫描:查询开销衡量标准(响应时间、扫描行数、返回行数)
- 响应时间:服务时间(执行查询)+排队时间(IO或者等待资源、锁等);快速上线估计法。
- 扫描的行数和返回的行数:一般1:1-->1:10。
- 扫描行数和访问类型:同一行数据的不同访问方式(扫描表、索引、范围访问、唯一索引、常熟引用、单值访问)的扫描行数的差异,通常增加索引是一个最直接的方法。大量扫描返回少量行数的查询优化技巧:
- 使用索引覆盖扫描:把所有需要的列放到索引中,存储引擎无需回表获取对应的行,直接返回结果。
- 改变库表结构:增加汇总性表存储,空间换时间,效率。
- 重写查询:sql结构。
- 复杂查询与简单查询的选择:复杂查询考虑的是网络通信,查询解析及优化的因素。将复杂查询分解为多个组合的简单查询有时会是不错的选择。
- 切分查询:将大查询切分为多个相同的小查询。例如:删除旧数据时。
- 分解关联查询:将分解的单个查询在应用层进行整合。
- 增加缓存效率:应用服务通常需要缓存常用单表查询,重复利用。
- 分解的单个查询可以减少锁的竞争。
- 应用层进行关联,使得数据库拆分更加容易,构建高性能及高扩展性的程序、服务。
- 查询效率的提升。
- 减少冗余记录的查询。
- 应用层的哈希关联效率高于mysql的循环嵌套关联。
特殊优化:
- count(*) 并不是统计所有列,而是是统计行数。
- MyISAM的count()在没有where条件的时非常快,优于其它引擎。
- 快速、精确、实现简单 只能满足其二。
- 优化关联查询:
- 确保ON或者USING子句中的列上有索引。在创建索引时要考虑关联的顺序,一般来说,除非有其它理由,否则只需要在管理按顺序中的第二表的相应列上创建索引。
- 确保任何的GROUP BY和ORDER BY中的表达式只涉及到一个表中的列,这样Mysql才能使用索引来优化过程。
- 升级Mysql需要检查优化。
- 5.6之前尽可能使用关联查询代替子查询。
- UNION查询:Mysql通过创建填充临时表的方式来执行。
mysql查询性能优化的更多相关文章
- MySQL查询性能优化(精)
MySQL查询性能优化 MySQL查询性能的优化涉及多个方面,其中包括库表结构.建立合理的索引.设计合理的查询.库表结构包括如何设计表之间的关联.表字段的数据类型等.这需要依据具体的场景进行设计.如下 ...
- 170727、MySQL查询性能优化
MySQL查询性能优化 MySQL查询性能的优化涉及多个方面,其中包括库表结构.建立合理的索引.设计合理的查询.库表结构包括如何设计表之间的关联.表字段的数据类型等.这需要依据具体的场景进行设计.如下 ...
- 到底该不该使用存储过程 MySQL查询性能优化一则
到底该不该使用存储过程 看到<阿里巴巴java编码规范>有这样一条 关于这条规范,我说说我个人的看法 用不用存储过程要视所使用的数据库和业务场景而定的,不能因为阿里巴巴的技术牛逼,就视 ...
- MySQL查询性能优化七种武器之索引下推
前面已经讲了MySQL的其他查询性能优化方式,没看过可以去了解一下: MySQL查询性能优化七种武器之索引潜水 MySQL查询性能优化七种武器之链路追踪 今天要讲的是MySQL的另一种查询性能优化方式 ...
- MySQL优化技巧之五(mysql查询性能优化)
对于高性能数据库操作,只靠设计最优的库表结构.建立最好的索引是不够的,还需要合理的设计查询.如果查询写得很糟糕,即使库表结构再合理.索引再合适,也无法实现高性能.查询优化.索引优化.库表结构优化需要齐 ...
- MySQL查询性能优化---高性能(二)
转载地址:https://segmentfault.com/a/1190000011330649 避免向数据库请求不需要的数据 在访问数据库时,应该只请求需要的行和列.请求多余的行和列会消耗MySql ...
- 《高性能MySQL》之MySQL查询性能优化
为什么查询会慢? 响应时间过长.如果把查询看做是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.如果要优化查询,实际上优化其子任务,要么消除其中一些子任务,要么减少子任务的执行次数, ...
- MySQl 查询性能优化相关
0. 1.参考 提升网站访问速度的 SQL 查询优化技巧 缓存一切数据,读取内存而不是硬盘IO 如果你的服务器默认情况下没有使用MySQL查询缓存,那么你应该开启缓存.开启缓存意味着MySQL 会把所 ...
- Mysql 查询性能优化
查询优化,索引优化,库表结构优化需要齐头并进,一个不能落. 为什么查询速度会慢 在阐释编写快速的查询之前,需要清楚一点,真正重要的是响应时间.如果把查询看做是一个任务的话,那么它由一系列子任务构成,每 ...
随机推荐
- mapreduce多文件输出的两方法
mapreduce多文件输出的两方法 package duogemap; import java.io.IOException; import org.apache.hadoop.conf ...
- ifconfig: command not found(CentOS专版,其他的可以参考)
ifconfig: command not found 查看path配置(echo相当于c中的printf,C#中的Console.WriteLine) echo $PATH 解决方案1:先看看是不是 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(75)-微信公众平台开发-用户管理
系列目录 前言 本节主要是关注者(即用户)和用户组的管理,微信公众号提供了用户和用户组的管理,我们可以在微信公众号官方里面进行操作,添加备注和标签,以及移动用户组别,同时,微信公众号也提供了相应的接口 ...
- 算法与数据结构(十四) 堆排序 (Swift 3.0版)
上篇博客主要讲了冒泡排序.插入排序.希尔排序以及选择排序.本篇博客就来讲一下堆排序(Heap Sort).看到堆排序这个名字我们就应该知道这种排序方式的特点,就是利用堆来讲我们的序列进行排序.&quo ...
- Dropzone.js实现文件拖拽上传
dropzone.js是一个开源的JavaScript库,提供 AJAX 异步文件上传功能,支持拖拽文件.支持最大文件大小.支持设置文件类型.支持预览上传结果,不依赖jQuery库. 使用Dropzo ...
- H3 BPM让天下没有难用的流程之技术体系
一.技术架构 H3 BPM 基于微软.NET 技术架构,采用C#语言开发,以高开放.高扩展.高性能为核心准则,遵循分层的设计原理,结合最新的B/S 以及智能手机应用开发技术研发的. 图:H3 BPM ...
- MySQL常用命令
数据库登陆命令: mysql -uroot -p 2.提示输入密码: 3.登陆成功: 4.数据库修改相关命令: 修改数据库的编码格式: 语法格式为:ALTER {DATABASE|SCHEMA} [ ...
- 解决开启服务器防火墙导致ftp不能连接的问题
在防火墙设置的"高级"选项卡中的"网络连接设置"--"本地连接"--"设置"中添加了"FTP服务器" ...
- ELK分析IIS日志
LogStash.conf input { file { type => "iis_log" path => ["C:/inetpub/logs/LogF ...
- JBPM
JBPM简介 什么是jbpm JBPM,全称是Java Business Process Management(业务流程管理),它是覆盖了业务流程管理.工作流.服务协作等领域的一个开源的.灵活的.易扩 ...