今天客户那边遇到一个问题:多选文件进行操作,数据量一大后台处理就特别慢,浏览器显示504超时。为了验证问题是否出在sql语句,所以用以下方法来分析:
- 查询SQL执行记录
- explain 分析
- MySQL 语句执行时间
下面会分别介绍三个方法的开启方法。
查询SQL执行记录
查询日志功能是否开启
show variables LIKE 'general%';

general_log:日志记录功能是否开启,默认为OFF
general_log_file:日志存放路径
开启日志功能
set GLOBAL general_log = 'ON';
然后再次查询是否开启成功
在指定路径查看SQL记录
explain 分析
大部分的性能分析都需要使用到该命令,可以用来查看SQL语句的执行效果,可以帮助选择更好地索引和优化语句。
语法
explain + SQL语句
输出:

参数解析
| id | SELECT识别符。这是SELECT的查询序列号 |
| select_type |
SELECT类型,可以为以下任何一种:
|
| table |
输出的行所引用的表 |
| type |
联接类型。下面给出各种联接类型,按照从最佳类型到最坏类型进行排序:
|
| possible_keys |
指出MySQL能使用哪个索引在该表中找到行 |
| key | 显示MySQL实际决定使用的键(索引)。如果没有选择索引,键是NULL。 |
| key_len | 显示MySQL决定使用的键长度。如果键是NULL,则长度为NULL。 |
| ref | 显示使用哪个列或常数与key一起从表中选择行。 |
| rows | 显示MySQL认为它执行查询时必须检查的行数。多行之间的数据相乘可以估算要处理的行数。 |
| filtered | 显示了通过条件过滤出的行数的百分比估计值。 |
| Extra |
该列包含MySQL解决查询的详细信息
|
MySQL 语句执行时间
show profile 以及show profiles语句可以显示当前会话过程中执行SQL语句的性能信息。
查看profile是否开启
show variables like '%profil%';

profiling:OFF 默认此功能关闭
设置开启状态
set profiling = 1;
再次查看是否开启

已经是开启状态
执行sql语句后进行分析
执行完后,输入
show profiles;
即可查看所有的sql的执行时间

show profile for query 1
查看第1个sql语句的执行的各个操作的耗时详情。

show profile cpu, block io, memory,swaps,context switches,source for query 6;
可以查看出一条SQL语句执行的各种资源消耗情况,比如CPU,IO等
show profile all for query 6 查看第6条语句的所有的执行信息。
测试完毕后,关闭参数:
mysql> set profiling=0
下一篇来说下慢查询