在Mysql中执行Sql语句经常会遇到有的语句执行时间特别长的情况,出现了这种情况我们就需要静下心分析分析。

  首先,我们需要确定系统中哪些语句执行时间比较长。这个可以使用Mysql的慢日志来跟踪。下面给出一段SQL示例:

  首先准备一个数据库,这里有现成的数据:

  https://github.com/grezbo/cn_zipcode

  数据准备好了,我们先看下mysql中关于慢日志的系统变量(慢日志默认是没有开启的,而我这里已经开启了)

  show variables like 'slow%'

  

  如果看到slow_query_log是OFF,那就需要手动开启

  set global slow_query_log = ON;

  再看下当前将超过多少时间的sql作为慢日志

  show variables like 'long%';

  

  我这里目前是1s,可以设置:set long_query_time = 0.1;

  最后看下当前session记录的慢日志次数:

  show status like '%slow_q%';

  

  我这里当前已经执行了3次慢查询

  好啦,前期工作准备好了,接下来我们可以执行一条语句了:

  select * from zip_code order by district, area;

  

  这条语句执行了1.745s,已经达到了慢查询的标准,应该被记录下来,所以我们查看一下状态变量Slow_queries

  

  已经变成了4,说明该条语句确实被记录了下来,那么我们去看下慢查询语句所在的文件

  

  在slow_query_log_file这个路径下面

  

  可以看到这里就是我们刚才执行那条语句,可以看到真实执行的时间是1.743617。

  到这一步,我们定位了慢SQL,接下来就是对SQL语句进行分析了。有经验人看几眼SQL可能就知道问题在哪儿了,

我做不到。。。。我一般采用分段分析和用explain命令来分析。

  对刚才那条语句使用explain:

  explain select * from zip_code order by district, area;

  

  这条命令返回的特别快,因为它并不会去执行SQL语句,只是分析语法优化器最终会采用什么策略来执行SQL语句。

  这里面可以看到该条SQL有没有走索引,用的什么来排序,用了那个索引等等,具体可以参考其他博文,我就没必要再贴出来了

  https://www.cnblogs.com/yycc/p/7338894.html

  优化的原则是查询要尽量走索引,避免过多的回表和全表扫描的发生;尽量不要用*号,尽量带上where条件。

  以上是一篇很简单的关于分析慢SQL的文章,感谢各位阅读。

最新文章

  1. RakNet基本教程
  2. hdu3415 单调队列
  3. ListView 中的ImageView Button
  4. [fortify] open redirect漏洞
  5. python之raise、assert、with/as环境管理器
  6. @OneToMany---ManyToOne
  7. Eclipse启动时选择workspace设置
  8. 微信订阅号里实现oauth授权登录,并获取用户信息 (完整篇)
  9. hdu 1003 Max sum(简单DP)
  10. Windows C盘格式化或者同平台迁移oracle数据库
  11. bjfu1211 推公式,筛素数
  12. vim 编辑器 打开GB2312、GBK文件乱码解决方法
  13. 深入理解JAVA多态原理
  14. Two Sum 解答
  15. linux是一种修行
  16. golang并发编程
  17. PHP常用代码大全(新手入门必备)
  18. Docker部署Zabbix监控MariaDB主从同步(Percona Monitoring Plugins for Zabbix)
  19. css实现连续数字和英文的自动换行的方法
  20. SpringBoot(2) Json框架 -- Jackson返回结果处理

热门文章

  1. D - 英文题 (多组背包)
  2. Codeforces1312D Count the Arrays 组合数学
  3. 模拟CMOS集成电路 课后习题总结(2.1)
  4. 大厂运维必备技能:PB级数据仓库性能调优
  5. FastDFS+nginx整合模块安装
  6. SpringCloud Gateway高阶之Sentinel限流、熔断
  7. leetcode刷题-55跳跃游戏
  8. 怎么把后台传过来的Json拼成table 用Jquery ajax()
  9. 谈谈 mysql和oracle的使用感受 -- 差异
  10. Django 多页面间参数传递用session方法(Django七)