mysql sql性能_Mysql SQL性能分析及调优

1、查看profile

打开profile开关后,执行SQL语句后,再执行 show profile即可看到profile内容:

4426b530811014ca4b616a82885d7c2d.png

这些数据会被Mysql记录在 INFORMATION_SCHEMA.PROFILING 表中。

但有一个问题,一个查询它最多记录100条,而一个复杂的SQL语句,细节数据远超100条,导致细节记录得不完整。

这个问题暂时没找到解决办法。

通过下面的语句可以以倒序的方式将INFORMATION_SCHEMA.PROFILING表中的最近执行过的SQL的profile内容展现出来:

SELECT

*

FROMINFORMATION_SCHEMA.PROFILINGORDER BYQUERY_IDDESC,

SEQDESC;

查询结果如下:

a1b3482e78c62641589d55b60e288505.png

我们可以看到 这个查询的seq已经到了12270了,但这个表中也只会记录100条。

profile的说明可以查看文章:

2、汇总profile

Show profile 给出了查询执行的每个步骤及花费的时间,当语句是很简单的一次执行的时候,可以很清楚的看出语句每个顺序花费的时间,

但是当语句是嵌套循环等操作的时候,看这个报告就会变得很痛苦,

因此整理了以下语句对相同类型的操作进行汇总,脚本如下:

--其中 123 位 Query_Id

SELECT STATE,SUM(DURATION) ASTOTAL_R,ROUND(100*SUM(DURATION)/(SELECT SUM(DURATION)FROMINFORMATION_SCHEMA.PROFILINGWHERE QUERY_ID=@QUERY_ID),2) ASPCT_R,COUNT(*) ASCALLS,SUM(DURATION)/COUNT(*) AS "R/CALL"FROMINFORMATION_SCHEMA.PROFILINGWHERE QUERY_ID= 123

GROUP BYSTATEORDER BY TOTAL_R DESC;

结果如下图:

74f0b5c6f2b97751e85c6b55ab1e639b.png

3、查看进一步优化后的SQL,但并非最终执行的SQL

通过 explain 查看执行计划后,再执行show warnings,可以进一步查看 进一步优化后的SQL,

但这个也并非最终Mysql执行的SQL。(曾今拿一个show warnings 中的SQL执行,1秒中即得到查询结果,但原SQL执行却要28秒。侧面说明show warnings 中的SQL并非真正执行的SQL)

explain select * fromaccount;

show WARNINGS

执行结果为:

图一为explain的结果:

efad674524ddaa2f713fb8a97fa80fb2.png

图二为show Warnings的结果:

31ba5f1f21e131ab25876a0be84057bc.png

我们可以看到进一步优化的语句。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值