mysql看懂执行计划之用explain优化查询
EXPLAIN
语句提供了关于MySQL执行语句的信息:
-
当
EXPLAIN
与可解释的语句一起使用时,MySQL会展示优化器针对该语句的执行计划。 也就是说,MySQL解释了它将如何处理语句,包括有关如何联接表以及以何种顺序联接的信息。 有关使用EXPLAIN获取执行计划信息的信息,请参见第8.8.2节“EXPLAIN输出格式化.”。 -
当
EXPLAIN
和FOR CONNECTION *
connection_id*
一起使用而不是和一个可解释的语句时,它将显示在命名连接中执行的语句的执行计划。请参见第8.8.4节“获取命名连接的执行计划信息”。 -
对于
SELECT
语句,EXPLAIN
会生成可以使用SHOW WARNINGS
显示的其他执行计划信息。 请参见第8.8.3节“扩展EXPLAIN输出格式”。 -
EXPLAIN
对于检查涉及分区表的查询时同样可用。请参见第23.3.5节“获取有关分区的信息”。 -
FORMAT选项可用于选择输出格式。 TRADITIONAL以表格格式显示输出, 如果不存在FORMAT选项,它这是默认值。 JSON格式则以JSON格式显示信息。
有了 EXPLAIN
的帮助,你可以看到哪些表可以添加索引,以便通过索引查找行使得语句执行的更快。你还可以使用EXPLAIN
来检查优化器是否以最佳顺序连接表。要提示优化器使用与SELECT
语句中表的命名顺序相对应的联接顺序,请以SELECT STRAIGHT join而不只使用是SELECT
。然而,STRAIGHT_JOIN
可能用不到索引,以为它金枝了半联接转换。请看MySQL内部机制:跟踪优化器。
如果你认为索引应该被使用而没有使用索引,请运行ANALYZE TABLE以更新可能影响优化程序所做选择的表统计信息,例如键的基数。请看第13.7.3.1节。
注意
EXPLAIN
也可以用于获取表的字段信息。EXPLAIN *
tbl_name*
i等同于DESCRIBE *
tbl_name*
和SHOW COLUMNS FROM *
tbl_name*
。更多,请看第13.8.1节, “DESCRIBE语法”, 和 第13.7.6.5节, “SHOW COLUMNS 语法”.