数据库13——数据库优化3

107 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

explain命令

基本

使用 Explain 分析:explain命令可以得到哪些索引可以使用哪些索引被实际使用被扫描的行数表的读取顺序数据读取的操作类型等问题;

MySQL中提供了EXPLAIN语句和DESCRIBE语句,用来分析查询语句,EXPLAIN语句的基本语法 如下:EXPLAIN [EXTENDED] SELECT select_options

使用EXTENED关键字,EXPLAIN语句将产生附加信息。执行该语句,可以分析EXPLAIN后面SELECT语句的执行情况,并且能够分析出所查询表的一些特征

explain关注什么

重点要关注如下几列:

id:SELECT识别符。这是SELECT的查询序列号。

type 本次查询表联接类型,可以看到本次查询大概的效率

possible_keys:给出了MySQL在搜索数据记录时可选用的各个索引

key:是MySQL实际选用的索引

Extra:额外的信息说明

关注type,从上之下依次是最差到最好:

ALL 执行full table scan,这是最差的一种方式。

index 执行full index scan,可以通过索引完成结果扫描并且直接从索引中取的想要的结果数据

range 利用索引进行范围查询,比index略好。

index_merge 可以利用index merge特性用到多个索引,提高查询效率。

关注Extra列还有几种情况:

Using filesort用外部排序而不是按照索引顺序排列结果,数据较少时从内存排序,否则需要在磁盘完成排序,代价非常高,需要添加合适的索引。

Using temporary 需要创建临时表来存储结果,这通常发生在对没有索引的列进行GROUP BY时,或者ORDER BY里的列不都在索引里,需要添加合适的索引。

Using index 表示使用覆盖索引避免全表扫描,不需要再到表中进行二次查找数据,是比较好的结果。