explain执行计划
explain是mysql中一关键字,用于查看执行计划, 模拟执行器执行sql查询语句, 从而分析sql语句或表结构的性能瓶颈或优化方向。
explain用途
可分析得到以下信息:
- 表读取顺序
- 数据读取操作的操作类型
- 可使用的索引
- 实际使用的索引
- 表间引用
- 遍历数据行数
explain字段
explain结果返回以下字段
id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
---|
实例
下列说明中的查询,以该表结构为例
CREATE TABLE `user` (
`id` int NOT NULL COMMENT 'id',
`name` varchar(255) COLLATE utf8mb4_bin NOT NULL COMMENT '姓名',
`age` int NOT NULL COMMENT '年龄',
`sex` tinyint(1) NOT NULL COMMENT '性别',
`phone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '电话',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_phone` (`phone`),
KEY `idx_name` (`name`),
KEY `idx_name_age_sex` (`name`,`age`,`sex`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
id
id
为select的序列号,有几个select,就有几个id
- id值不同:如果是只查询,id的序号会递增,id值越大优先级越高,越先被执行;
- id值相同:从上往下依次执行;
- id列为null:表示这是一个结果集,不需要使用它来进行查询。
select_type 查询类型
-
simple
表示查询中不包含union操作或子查询
explain select * from user where id = 1
id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 S I M P L E \color{#f56c6c}{SIMPLE} SIMPLE user ( N u l l ) \color{#909399}{(Null)} (Null) const PRIMARY PRIMARY 4 const 1 100.00 ( N u l l ) \color{#909399}{(Null)} (Null) -
primary
需要union或者含子查询的select,位于最外层查询的select_type即为primary, 有且只有一个
explain select * from user where id = 1 union select * from user where id = 2
id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 P R I M A R Y \color{#f56c6c}{PRIMARY} PRIMARY user ( N u l l ) \color{#909399}{(Null)} (Null) const PRIMARY PRIMARY 4 const 1 100.00 ( N u l l ) \color{#909399}{(Null)} (Null) 2 UNION user ( N u l l ) \color{#909399}{(Null)} (Null) const PRIMARY PRIMARY 4 const 1 100.00 ( N u l l ) \color{#909399}{(Null)} (Null) ( N u l l ) \color{#909399}{(Null)} (Null) UNION RESULT <union1,2> ( N u l l ) \color{#909399}{(Null)} (Null) ALL ( N u