十、MySQL的SQL优化之定位SQL的问题 - 系统的撸一遍MySQL

找出SQL慢的原因

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

检查MySQL状态

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

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

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

参数说明
Com_selectSELECT查询次数
Com_insertINSERT操作次数
Com_updateupdate更新次数
Com_deletedelete操作次数

innodb_rows_read

innodb_rows_inserted

innodb_rows_updated

innodb_rows_deleted

select查询返回行数

update、insert、delete操作次数

ConnectionsMySQL累计连接次数
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主查询,最外层的查询
UNIONunion查询中后面的查询语句
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对条件的优化,恒等条件的优化等信息,便于查询出性能瓶颈。

 

    原文作者:mysql索引优化
    原文地址: https://my.oschina.net/u/226106/blog/782002
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞