Mysql 查下优化EXPLAIN详解

/ 0评 / 0

例子:

EXPLAIN SELECT * FROM users WHERE age > 18;

EXPLAIN 输出的列解析
每个 EXPLAIN 的输出结果包含如下关键字段:

列名 说明
id 查询中每个 SELECT 子句的标识符。id 越大优先级越低,执行顺序是从上到下。
select_type SELECT 查询类型,表示是简单查询、子查询、联合查询还是派生表等。
table 显示该行对应的表名,表示查询涉及到的表。
partitions 使用的分区(仅在表有分区时显示)。
type 连接类型,显示表的访问方式,重要程度从高到低依次是 system、const、eq_ref、ref、range 等。
possible_keys 查询中可能会用到的索引。
key 实际使用的索引。
key_len 使用的索引长度,表示 MySQL 从索引中使用了多少字节。
ref 显示索引列是否和哪些列或常量进行比较。
rows 预估扫描的行数。该数字越小越好。
filtered 过滤条件的百分比,即返回的行数占扫描行数的百分比。
Extra 显示执行过程中额外的信息。

常见的 select_type 值

常见的 type 值(连接类型), 重要程度从高到低依次为:

Extra 字段包含了查询优化器对查询进行的其他操作,以下是一些常见的值及其含义:

例子:

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE users range age_index age_index 4 NULL 1000 Using where

分析:
type 为 range 表示使用了范围扫描。
key 使用的索引是 age_index
rows 为 1000 表示预估会扫描 1000 行数据,扫描行数较多,查询速度可能较慢。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注