MySQL 性能分析Explain
一、MySQL性能优化
1.1 MySQL Query Optimizer的作用
MySQL中有专门负责优化SELECT语句的优化器模块,主要功能:
通过计算分析系统中收集到的统计信息,为客户端请求的Query提供他认为最优的执行计划
ps:
MySQL认为最优的数据检索方式,但不见得是DBA认为是最优
当客户端向MySQL请求一条Query
命令解析器模块完成请求分类
区别出是SELECT时并转发给MySQL Query Optimizer
MySQL Query Optimizer的处理过程
对整条Query进行优化,处理掉一些常量表达式的预算,直接换算成常量值
对Query中的查询条件进行简化和转换,如去掉一些无用或显而易见的条件、结构调整等
分析Query中的Hint信息(如果有),看显示Hint信息是否可以完全确定该Query的执行计划
如果没有Hint 或Hint信息还不足以完全确定执行计划,则会读取所涉及对象的统计信息,根据Query进行写相应的计算分析
得出最后的执行计划
1.2 MySQL 常见瓶颈
CPU瓶颈
CPU在饱和的时候一般发生在数据装入在内存或从磁盘上读取数据时候
IO瓶颈
磁盘I/O瓶颈发生在装入数据远大于内存容量时
服务器硬件的性能瓶颈
top、free、iostat和vmstat来查看系统的性能状态
二、Explain概述
2.1 是什么
Explain 是查看执行计划
使用EXPLAIN关键字可以模拟优化器执行SQL语句,从而知道MySQL是如何处理SQL语句的。分析查询语句或是结构的性能瓶颈
官网地址:https://dev.mysql.com/doc/refman/8.0/en/explain-output.html
2.2 能干嘛
表的读取顺序(id 字段)
数据读取操作的操作类型(select_type 字段)
哪些索引可以使用(possible_keys 字段)
哪些索引被实际使用(keys 字段)
表之间的引用(ref 字段)
每张表有多少行被优化器查询(rows 字段)
2.3 怎么玩
Explain + SQL语句
mysql> explain select * from t_emp;
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
| 1 | SIMPLE | t_emp | ALL | NULL | NULL | NULL | NULL | 10 | |
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
1 row in set (0.00 sec)