MySQL 深入浅出数据库索引原理(转)

Posted 寻觅beyond

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 深入浅出数据库索引原理(转)相关的知识,希望对你有一定的参考价值。

  官方权威文档:https://dev.mysql.com/doc/refman/5.7/en/execution-plan-information.html,本文是摘抄的官网手册。

  原文地址:https://www.cnblogs.com/-beyond/p/9429518.html

目录

一.explain介绍

二.explain的输出形式

  2.1 traditional形式

  2.2 json形式

  2.3 json与traditional两种形式的对应关系

三.explain输出内容介绍

  3.1 table

  3.2 select_type

  3.3 partitions

  3.4 type

  3.5 key

  3.6 key_len

  3.7 possible_keys

  3.8 ref

  3.9 rows

  3.10 filtered

  3.11 extra

  

 

一.explain介绍

  explain,可以用来分析查询执行计划;

  可以使用explain来分析select、update、delete、insert、replace命令的查询计划,当explain与这些语句一起使用时,可以得到mysql优化器对该sql执行计划的信息,也就是说,MySQL解释了它将如何处理该sql,包括有关如何连接表以及以何种顺序连接表的信息;

  借助explain,您可以看到可能使用的索引,以便通过使用索引查找行来使语句更快地执行;

  您还可以explain用来检查优化器是否以最佳顺序连接表;

  需要注意的是,explain命令在分析查询计划的时候,并不会真正执行sql,可以看下面的示例:

  

 

二.explain输出形式

  使用explain分析sql的执行计划时,对于输出的内容,可以选择traditional和json两种形式,使用format进行指定。

2.1 traditional形式

  traditional(也就是table形式)是默认的输出形式,如下图所示:

  

2.2 json格式

  指定format=json即可,如下图所示:

  

 

2.3 traditional与json的对应关系

  注意上面两张图中,json和traditional两种形式,对应的字段名称不是一样的,具体的对应关系如下图所示:

  

 

三.explain输出内容解释

3.1 table

  sql涉及到的表,都会有一行描述该表的查询计划,比如下面用到了user表和other_info表,那么最终的查询计划会给出两个表的各自查询计划。

  

 

 

 

3.2 select_type

 

3.3 partitions

  如果查询涉及的数据库表使用了分区,那么partition字段列表示的就是具体查询的哪个分区。

  如果查询涉及的库表没有使用分区,那么partition字段为null;

 

3.4 type

 

3.5 key

 

3.6 key_len

 

3.7 possible_keys

 

3.8 ref

 

3.9 rows

 

3.10 filtered

 

3.11 extra

 

以上是关于MySQL 深入浅出数据库索引原理(转)的主要内容,如果未能解决你的问题,请参考以下文章

(转)深入浅出数据库索引原理

深入理解 Mysql 索引底层原理

从原理到优化,深入浅出数据库索引

(转)Mysql 索引原理及优化

Mysql(11)—BTREE索引的数据结构以及具体实现原理深入解析

深入MySQL索引