sql 语句优化过程中,explain 用于获取查询执行计划(即有关MySQL如何执行查询的说明)。
explain 经常与 SELECT,DELETE,INSERT,REPLACE 和 UPDATE 语句一起使用,用来分析这些 sql 语句的执行计划,当 explain 与可解释的语句一起使用时,MySQL 将显示来自优化器的有关语句执行计划的信息。也就是说,MySQL 解释了它将如何处理该语句。
1、优化器常用优化类型
优化器内部为了找到最优的执行计划,查询优化器会对一些查询进行优化,一般可以优化的sql类型如下:
2、explain 的用法介绍
explain 的用法非常简单,在你的 sql 语句前加上 explain,点击执行,就可以看到你的 sql 语句的执行计划。
explain select from user where id = 1001;
--为了方便查看,可以在语句后面加一个\G
explain select from user where id = 1001 \G;
explain 用于获取执行计划信息的信息如下,需要特别关注的内容如下:
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 条件