MySQL 优化 —— Explain 执行计划的理解

引言

本博客总结自MySQL 官网 Understanding the Query Execution Plan 专题。

根据我们的表、字段、索引、以及 where 子句中的条件等信息,MySQL 优化器会考虑各种技术来更高效地执行查找。一个大表中的查找不一定要读取所有记录;多表连接也不一定需要比较每条联合记录。优化器选择的执行最优查询的操作集,称为“查询执行计划”,也可以说是 EXPLAIN 计划。我们的目标就是找到那些可以将查询优化地更好的点,然后通过学习 SQL 语法和索引等技术,来改善执行计划。

一、什么是 EXPLAIN ?

EXPLAIN 语句提供了 MySQL 如何执行语句的信息:

1、EXPLAIN 可以和 SELECT DELETE INSERT REPLACE UPDATE 语句等一起工作;

2、当 EXPLAIN 和一个可被解释的语句一起使用时,MySQL 就会展示来自优化器的关于语句执行计划的信息。即,MySQL 会解释它将会怎样执行语句,包括表是如何连接、以什么方式排序等信息。

3、When EXPLAIN is used with FOR CONNECTION connection_id  rather than an explainable statement, it displays the execution plan for the statement executing in the named connection.

4、对于 SELECT 语句, EXPLAIN 提供了额外的执行计划信息,可以用 SHOW WARNINGS 来查看。

5、EXPLAIN对于检查涉及分区表的查询非常有用。

6、FORMAT 选项可以用于选择输出格式。TRADITIONAL 以表格的形式展示。如果没有指定 FORMAT 选项,那么TRADITIONAL 是默认的。JSON 格式会以 json 格式展示。

在 EXPLAIN 的帮助下,你可以清楚的知道为了让查询变得更快,该在哪里给表添加索引。你也可以知道优化器是否以最佳的顺序连接各个表。为了提示优化器使用与SELECT语句中表的命名顺序相对应的连接顺序,请以SELECT STRAIGHT_JOIN(而不是SELECT)开始该语句。However,STRAIGHT_JOIN may prevent indexes from being used because it disables semijoin transformations

优化器跟踪有时可能提供与EXPLAIN互补的信息。但是,优化器跟踪格式和内容可能在版本之间发生变化。

如果你对本应该使用索引而没有用到索引的情况感到疑惑,执行一下 ANALYZE TABLE 来更新表统计信息。例如键的基数,这会影响优化器所做的选择。

注意:

EXPLAIN 还可以用来获取表中列的信息。 EXPLAIN 表名DESCRIBE 表名 SHOW CLOUMS FROM 表名 是等价的。

(未完待续。。。。)

 

 

 

 

 

 

 

 

 

 

 

 

MySQL 优化 —— Explain 执行计划的理解MySQL 优化 —— Explain 执行计划的理解 圣斗士Morty 发布了192 篇原创文章 · 获赞 282 · 访问量 52万+ 他的留言板 关注
上一篇:MySQL 执行计划详解


下一篇:《高性能MySQL》之EXPLAIN