SQL 语句调优 explain 的用法

在之前 sql 语句执行过程的内容中,我们提到了查询优化器的内容,下面对其进行详细说明。

explain 用于获取查询执行计划(即有关MySQL如何执行查询的说明)。

explain 经常与 SELECT,DELETE,INSERT,REPLACE 和 UPDATE 语句一起使用,用来分析这些 sql 语句的执行计划,当 explain 与可解释的语句一起使用时,MySQL 将显示来自优化器的有关语句执行计划的信息。也就是说,MySQL 解释了它将如何处理该语句。

1、优化器常用优化类型
优化器内部为了找到最优的执行计划,查询优化器会对一些查询进行优化,一般可以优化的sql类型如下:

254200-1.png

2、explain 的用法介绍
explain 的用法非常简单,在你的 sql 语句前加上 explain,点击执行,就可以看到你的 sql 语句的执行计划。

explain select * from user where id = 1001;
--为了方便查看,可以在语句后面加一个\G
explain select * from user where id = 1001 \G;
explain 用于获取执行计划信息的信息如下,需要特别关注的内容如下:

254200-2.png

3、连接类型 type 的常用值说明
const:表示通过主键或者唯一索引的列与一个常数值进行比较时会使用 const 连接,查询效率最高,比如:

SELECT * FROM table_name WHERE primary_key=1;
eq_ref:表示唯一索引扫描,对于每个索引列在表中只有一条记录与之匹配,查询效率也很高,比如:

SELECT * FROM ref_table,other_table
WHERE ref_table.key_column=other_table.column;
ref :表示非唯一索引扫描,也就是说每个索引列在表中不只单条记录与之匹配,也是索引查询,效率也算高;

range:只检索给定范围的记录,也是使用索引来选择行,平常开发中至少要达到 range 的级别,否则需要优化;

SELECT * FROM table_name
WHERE key_column
BETWEEN 10 and 20;
index:索引全表扫描,按索引顺序扫描一遍从而查找数据行,效率较低,除非 Uses index 出现在 Extra列中。

All:全表扫描,遍历全表从而查找数据行,效率最低,一般需要通过添加索引来避免这种情况。

4、附加信息 Extra 的常用值说明
Using filesort:使用了文件进行排序,效率较低

Using index:使用了覆盖索引,效率较高

Using temporary:使用了临时表

Using where:使用了 where 条件

后面将为大家介绍 MySQL 服务器的调优策略。


作者:追梦人dreamcatcher


欢迎关注微信公众号 :追梦Java