mysql最新版explain详解来自官网直译(1)

来源:互联网 发布:淘宝vip课程免费下载 编辑:程序博客网 时间:2024/06/05 05:23
执行计划学习笔记
8.8.1用查询计划优化查询
mysql的执行计划提供了关于mysql执行语句的信息说明
执行计划可以用于SELECT查询、DELETE删除、INSERT插入和UPDATE更新语句。
当执行计划用于可使用执行计划的sql语句时,mysql会展示优化器关于执行sql语句的详细信息。也就是mysql会怎么样去执行这个sql语句,包括怎么做表连接和怎么排序。关于更具体的执行计划输出信息请看8.8.2的执行计划输出格式化。
当执行计划是被用在关于某一个连接id而不是具体的执行sql语句,则输出信息包含了一个名字连接。具体信息看8.8.4获取执行计划信息为一个被命名的连接。
对于执行sql,explain产生的额外执行计划信息,请看8.8.3的扩展执行计划输出格式化
explain是有用的对于检查执行涉及到分表,看22.3.5的获取关于分区的信息
格式化选项可以用于查询的输出格式化,默认以表格形式展示。也可以选择json格式的输出。
通过explain信息的帮助,你能够发现在表的哪儿加索引会比现在已有的索引列有更快的执行效果。你也能用explain检查sql是否采用了最优的表连接顺序。为了给优化器一个关于查询中表的正确连接顺序的提示,我们应该以 select straight_join 开始,而不仅仅是select。然而straight_join 也有可能阻止已经使用的索引,因为他不能够处理半连接的转变。请看8.2.2.1优化子查询、派生表和用半连接转变视图引用。
追踪优化器有时候也许可以给explain提供额外的补充信息。但是追踪信息受版本影响不固定。具体信息请看mysql构件:追踪执行计划。
当你觉得存在索引应该使用但是没有使用的问题时,执行一下 analyze table 更新表的统计信息,因为例如关键字keys的基数有可能会影响优化器的执行选择。具体请看13.7.2.1的表语法的分析。




另外,explain也能用于获取表中列的信息。explain table_name 和 describe table_name 有相同的效果,也和show columns from table_name也是同意。更多信息请看13.8.1的describe的语法和13.7.5.5的列展示语法


8.8.2explain输出格式化
explain能够作用在SELECT查询、DELETE删除、INSERT插入和UPDATE更新语句,并且提供具体mysql执行信息。
explain对于在查询中的每张表都返回一行信息。而表中展示的顺序就是mysql读取并执行他们的顺序。mysql用一个嵌套循环连接的方法来决定所用的表连接。这也说明了mysql读取一行从第一张表,然后开始在第二张表、第三张表、第四张表等等中寻找匹配的行。当所用的表都被处理,mysql会输出选中的列并且根据表列表原路返回直到发现某一张表中匹配到多行数据。则从该表的下一行开始继续处理下一张表。
explain也能在结果中输出包含分区的信息。在执行查询计划中,explain产生的通过警告的形式展示额外信息具体请看8.8.3的额外信息的输出格式化


另外,在mysql的老版本中,分区和额外信息也可以通过explain partitions 和explain extended命令来获取。为了向后兼容,这些语法依然被保留,但是分区和扩展信息现在可以通过默认来输出了。所以partions关键字和extended关键字已经是多余和过期的了。如果要使用会以警告的形式提示,并且在未来的版本中,他们将会从explain语法中移除。


也就是说你可以通过使用上述两个过时的关键字来收集一些格外的信息,也可以通过Format选项来获取这些信息。


explain 的列输出:
这一部分将会对explain产生的输出结果中的列进行说明。后续的部分提供了type和Extra列的附加信息。
explain输出的每一行表示一张表,输出行中的列值在表8.1中做了总结,并且做了更详细的说明。


列名 json名          意义说明
id select_id       查询的主键编号
select_type none    查询的类型
table table_name      输出行的表名
partitions           partitions      分区匹配
type                                 access_type     连接类型
ppssible_keys possible_keys   可能选择的索引列
key         key 实际选择的索引
key_len         key_length 索引实际长度
ref         ref 与索引比较的列
rows rows 预估检索的行数
filtered         filtered        通过表条件过滤掉行数的百分比
Extra None 额外信息


注意:Joson属性为none的列表示了在Json格式输出的时候,没有输出。

图片:


接下来我们将会具体的展示每一列的详细信息并一一说明,于官网5.7版本对应。























原创粉丝点击