mysql系列之执行计划
mysql系列之执行计划
explain
explain命令来查看到该条SQL是如何执行的(索引使用情况),随后解析explain的结果可以用来指导优化
包括表的读取顺序,数据读取操作的类型,哪些索引可以使用,哪些索引实际使用了,表之间的引用,每张表有多少行被优化器查询
explain select * from table_user ; |
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; |