十、MySQL的SQL优化之定位SQL的问题

点点圈 提交于 2019-11-26 23:18:39

找出SQL慢的原因

谈到MySQL不得不说的就是大家都会遇到的性能问题,今天就记录一下SQL优化相关的技巧。

检查MySQL状态

通过检查SQL语句的状态有助于MySQL的优化,首先介绍 show status命令

//检查当前会话的状态
SHOW SESSION STATUS;
//检查全局状态
SHOW GLOBAL STATUS;

这个命令可以查看到MySQL中sql语句的执行状态,具体的如下:

参数 说明
Com_select SELECT查询次数
Com_insert INSERT操作次数
Com_update update更新次数
Com_delete delete操作次数

innodb_rows_read

innodb_rows_inserted

innodb_rows_updated

innodb_rows_deleted

select查询返回行数

update、insert、delete操作次数

Connections MySQL累计连接次数
Slow_queries 慢查询次数
Handler_read_key 索引查询数
Handler_read_rnd_next 读取下一行的次数

通过以上的数据,可以检查出MySQL连接数量,决定是否使用链接池,索引利用率。

根据读写状况,可以了解到选择什么样的存储引擎更加合适。

分析SQL的执行计划

相信大家都不陌生多explain命令,用于检查SQL语句的执行计划,在索引优化的时候必不可少。

每次项目前都会开着SlowLog去压测,然后把满查询通过explain去分析。

首先介绍一下这个命令的常用用法:

//检查SQL语句执行计划
explain select * from user where username = 'fuckphp';
//查询MySQL优化后但语句执行计划
explain extended select * from user where username = 'fuckphp';
//查询MySQL分区信息的执行计划
explain partitions select * from user where username = 'fuckphp';
字段 描述
id 每个SELECT分配的ID
select_type
类型 说明
SIMPLE 简单表,不包含字查询或联表查询
PRIMARY 主查询,最外层的查询
UNION union查询中后面的查询语句
SUBQUERY 字查询的第一个语句
table 表名
type
类型 说明
ALL 全表扫描
index 全索引扫描
range 索引范围扫描(大于小于之类的查询)
ref 非唯一或主键索引的等值查询
eq_ref 使用唯一或主键的查询
const

const:只有一个匹配行使用了唯一或主键查询

possible_keys 可能用到的索引
key 查询用到的索引
key_len 索引长度
rows 检索行数
Extra 补充信息
ref 与key一同检索的字段或常数

通过show profile分析SQL

除了explain还有show profile这个神器,来帮我们分析SQL语句的执行过程。

//查看是否支持
show @@have_profiling;
//在会话中开启profile
set profiling=1;
//查询当前会话执行过的SQL 包含queryid 查询时间、查询语句
show profiles;
//根据queryid查询执行过程中的时间
show profile for query queryid;
//查询全部执行信息
show profile all for query queryid;
//查询source、cpu、block io、context、page faults等信息 更多查看help profile;
show profile cpu for query queryid;

这个神器会在未来版本中被MySQL废除掉,已经不建议使用,官方建议在performance_schema的PROFILING表中进行查询。

SQL的追踪

MySQL5.6以后,可以使用strace命令对SQL语句进行追踪。

//开启strace
SET OPTIMIZER_TRACE="enabled=on";
//设置strace 输出格式为json
SET END_MARKERS_IN_JSON=on;
//查询SQL信息
select * from information_schema.OPTIMIZER_TRACE\G

在这个结果中可以查看到MySQL对条件的优化,恒等条件的优化等信息,便于查询出性能瓶颈。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!