mysql|explain定位及优化慢sql&explain分析结果详细说明


创建的索引有没有被使用到?或者说怎么才可以知道这条语句运行很慢的原因?
对于低性能的SQL语句的定位,最有效的方法就是使用执行计划,MySQL提供了explain命令来查看语句的执行计划。我们知道,不管是哪种数据库,或者是哪种数据库引擎,在对一条SQL语句进行执行的过程中都会做很多相关的优化,对于查询语句,最重要的优化方式就是使用索引。 而执行计划,就是显示数据库引擎对于SQL语句的执行的详细情况,其中包含了是否使用索引,使用什么索引,使用的索引的相关信息等。

mysql|explain定位及优化慢sql&explain分析结果详细说明
文章图片

explain分析结果说明:

  • select_type:每个子查询的查询类型
  • table:查询的数据表
  • type:访问类型(非常重要,可以看出有没有走索引),有以下几个值:
属性值 含义
all 扫描全表数据
index 遍历索引
range 索引范围查找
index_subquery 在子查询中使用ref
unique_subquery 在子查询中使用 eq_ref
ref_or_null 对Null进行索引的优化的 ref
fulltext 使用全文索引
ref 使用非唯一索引查找数据
eq_ref 在join查询中使用PRIMARY KEYorUNIQUE NOT NULL索引关联
  • possible_keys:可能使用的索引,注意不一定会使用。查询涉及到的字段上若存在索引,则该索引将被列出来。当该列为 NULL时就要考虑当前的SQL是否需要优化了。
  • key:显示MySQL在查询中实际使用的索引,若没有使用索引,显示为NULL。
  • key_length:索引长度
  • ref:表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值 rows 返回估算的结果集数目,并不是一个准确的值。
SQL性能优化的目标?
至少要达到 range 级别。

【mysql|explain定位及优化慢sql&explain分析结果详细说明】

    推荐阅读