mysql系列之执行计划

mysql系列之执行计划

explain

explain命令来查看到该条SQL是如何执行的(索引使用情况),随后解析explain的结果可以用来指导优化

包括表的读取顺序,数据读取操作的类型,哪些索引可以使用,哪些索引实际使用了,表之间的引用,每张表有多少行被优化器查询

explain select * from table_user ;
preview

id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra

select_type

SIMPLLE:简单查询,该查询不包含 UNION 或子查询

PRIMARY:如果查询包含UNION 或子查询,则最外层的查询被标识为PRIMARY

SUBQUERY:子查询中的第一个select语句(该子查询不在from子句中)

Type

All: 全表扫描,性能最差。

index: 扫面全部索引,如果extra显示using index,说明使用覆盖索引

range:范围扫描

possible_keys

可能使用哪些索引来查找

key

显示MySQL实际决定使用的索引。如果没有选择索引,键是NULL。

rows

显示了估计要找到所需的行而要读取的行数,这个值是个估计值,原则上值越小越好。

extra

Using index:使用覆盖索引,

Using Where:在存储引擎检索行后再进行过滤,

Using temporary:在查询结果排序时会使用一个临时表,一般出现于排序、分组和多表 join 的情况,查询效率不高,建议优化。

Using filesort:对结果使用一个外部索引排序,而不是按索引次序从表里读取行,一般有出现该值,都建议优化去掉,因为这样的查询 CPU 资源消耗大。


profile

mysql 提供可以用来分析当前会话中语句执行的资源消耗情况

show profiles;
show profile cpu,block io for query ???

https://zhuanlan.zhihu.com/p/51771446