mysql explain工具

1,explain查询分析

1)explain select sql\G;查看执行计划

image.png

id : 值越大,优先级越高,越先被执行, 如果相同,从上而下执行;
select type : 查询的类型 PRIMARY、SIMPLE、DERIVED
type : 访问类型。ALL(全表扫描) index(遍历索引树) ref(非唯一性索引扫描)等。
possible_keys : 该查询可能使用哪些索引。
key : mysql 实际使用了哪一个索引来优化对该表的访问。
key_len: 是根据表定义算出来的,和具体数据无关。在索引中使用的字节数。
ref : 表的连接匹配条件。
rows : 估算的要找出结果需要读取的记录行数。
Extra : using index( select 操作中使用了覆盖索引)、using where(结果集进行过滤)、using temporary(使用临时表来存储结果集)、using filesort(无法利用索引完成的排序)
`

2,count查询优化

1)count(*) 统计结果集的行数。
count(column) :统计column不为空的数量,所以字段通常非空,切有默认值。
2)where条件, 会严重影响count的效率,即使是where 1 = 1
3)count( *)~count(pk) > count(index col) > count(col)

3,order by优化

数据库底层只进行I/O操作,无法进行排序,需要借助磁盘或者内存。

1)使用order by会出现using filesort,只要用到order by的这一列都应该为其建立一个索引。alter table tb_course_info add index idx_stm(startTime);
2)mysql inner join的时候,使用嵌套循环,小表作为驱动表。这时候,使用order by会进行using filesort,因为inner join会产生临时表,是无法使用索引的。可以使用from字句,排好序之后,再进行inner join,from也可以使用视图代替。

你可能感兴趣的:(mysql explain工具)