mysql的explain的用途,利用Explain来分析和优化你的mysql
下面我用一个例子来演示如何使用explain来优化mysql查询:
需求是这样的,在一个有1300+万条的mysql表中查出一个时间段内的数据,联表查询:select d2.name as '大区' ,d1.name as '事业部', et_station.name as '小区',et_device.direction as '方向',count(1) as '次数'
from et_exception
join et_station on et_station.id=et_exception.station
join et_device on et_device.id=et_exception.device
join et_department as d1 on d1.id=et_station.dept
join et_department as d2 on d1.parent=d2.id
where
`et_exception`.`time`>=UNIX_TIMESTAMP('2017/04/24 00:00:00')
and
`et_exception`.`time`
group by et_exception.station,et_device.direction
这条SQL语句直接执行,查询需要9秒完成,可想而知,在实际应用中,这条sql会有非常大的隐患,我们来用explain分析下:
可以看到,主表采用了全表扫描(type:ALL),mysql查询了13149541行记录(rows),这样的效率非常之低,业务需求不能更改的情况下,在生产环境执行可能会跑跨数据库,下面我们简单做处理:
考虑到业务需求,经常用时间来作为条件,查询数据导出报表,我们来给time字段加上索引。
再来explain分析下:explain(select d2.name as '大区' ,d1.name as '事业部', et_station.name as '小区',et_device.direction as '方向',count(1) as '次数'
from et_exception
join et_station on et_station.id=et_exception.station
join et_device on et_device.id=et_exception.device
join et_department as d1 on d1.id=et_station.dept
join et_department as d2 on d1.parent=d2.id
where
`et_exception`.`time`>=UNIX_TIMESTAMP('2017/04/24 00:00:00')
and
`et_exception`.`time`
group by et_exception.station,et_device.direction)
下面我们看结果:
对比上一张图我们能看到,type由ALL变成了range(范围检索),因为我们给time字段上了索引,mysql可以利用索引来检查行。rows由1300多万变成1,表示这次只用查询1行就完成了查询;
然后我们执行sql查询,整个查询只需要0.3秒完成。
当然了,这只是个例子,并不是可以适用任何业务需求的场景,explain可以帮我们分析出很多问题,大家可以去多多了解。
原创文章如转载,请注明出处,本文首发于彭超的博客
打赏
微信扫一扫,打赏作者吧~
mysql的explain的用途,利用Explain来分析和优化你的mysql相关推荐
- MySQL - order by 出现 using filesort根因分析及优化
文章目录 Pre Case table 模拟数据 故障复现 咋办? 方案一 加limit ,少取一点? using filesort 到底是个什么鬼???? filesort 步骤 rowid 排序 ...
- mysql 多key索引_MYSQL的EXPLAIN到底多好用?
工欲善其事必先利其器! 作为一名程序员,免不了要和MYSQL打交道.而在这过程中,就不得不面对性能优化这一大课题. 而在性能优化中,EXPLAIN就是能够帮助我们查看SQL执行计划是否优化的一个工具. ...
- MySql数据库explain用法示例_mysql explain的用法
MySQL的EXPLAIN命令显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. 一.通过expalin可以得到 1.表的读取顺序 2.表的读 ...
- mysql如何explan优化sql_《MySQL数据库》MySQL 优化SQL(explain)
前言 如果要写出优质的SQL语句,就需要了解MySQL的存储原理.MySQL是如何分析SQL,如何利用索引查询. Explain 关键字 explain select * from ic_base; ...
- mysql explain output_MySQL查询优化之explain的深入解析【转载】
在分析查询性能时,考虑EXPLAIN关键字同样很管用.EXPLAIN关键字一般放在SELECT查询语句的前面,用于描述MySQL如何执行查询操作.以及MySQL成功返回结果集需要执行的行数.expla ...
- mysql range代表什么意思_MYSQL explain详解之range
explain显示了MySQL如何使用索引来处理DML语句以及连接表,explain显示的信息可以帮助选择更好的索引和写出更优化的查询语句 2.EXPLAIN列的解释: table:显示这一行的数据是 ...
- mysql中的explain_MySQL中的EXPLAIN
使用EXPLAIN加上SELECT语句可以获取优化器的查询执行计划 MySQL会在查询上设置一个标记,当执行查询时,这个标记会返回关于在执行计划中每一步的信息,而不是执行它.它会返回一行或多行信息,一 ...
- mysql的explain中type取值与SQL性能优化的关系
本文转载自[1],对[1]进行了整理 explain结果中的type字段列表: type字段取值 说明 SQL示范 扫描条件 建表特点 system 系统表,少量数据,往往不需要进行磁盘IO: ex ...
- mysql explain 索引_MySql中Explain详解与索引最佳实践
使用EXPLAIN关键字可以模拟优化器执行SQL语句,从而知道MySQL是 如何处理你的SQL语句的.分析你的查询语句或是结构的性能瓶颈 下面是使用 explain 的例子: 在 select 语句之 ...
最新文章
- AI换脸鉴别率超99.6%,微软用技术应对虚假信息
- Android Studio检测内存泄露和性能
- cxgrid列高度行宽度定义
- NSNumber 以及NSInteger,NSNumber以及Int的区别
- Chrome 访问一次 Controller,请求却执行两次
- 在安卓上,微信公众号无法分享到QQ的解决办法之一
- mvc框架异常处理机制
- 【飞秋】一起学Windows Phone7开发(十三.四 基本控件)
- Eclipse的Git插件Egit: merge合并冲突具体解决方法
- python学习:删除空白
- 阻塞与非阻塞 异步 与同步
- jQuery treeTable
- sangerbox平台使用(五)venn图的绘制
- 使android桌面图标变大
- Kindle支持文档类型
- VS2008单元测试之调用的目标发生了异常
- Delphi下spcomm的安装,win7系统,delphi7和delphi2010.
- React Native热更新方案
- java手机验证码代码_发送手机验证码
- 使用WebMagic+ActiveMQ+Quartz实现全国城镇天气自动更新的API接口开发
热门文章
- 回顾线程的竞争机制-轻量级锁
- Redis中的过期策略
- 通过JSR250规范 提供的注解@PostConstruct 和@ProDestory标注的方法
- webpack打包js文件
- ES6新特性之转码器(UmiJS入门)
- 解决2次查询User的问题(ThreadLocal)
- Apollo客户端读取数据原理
- springBoot整合Listener
- Zuul使用正则表达式指定路由规则
- 在IDEA连接MySql数据库时报错: [08001] CLIENT_PLUGIN_AUTH is required com.mysql.cj.exceptions.