mysql - explain执行计划

explain执行计划

explain是mysql中一关键字,用于查看执行计划, 模拟执行器执行sql查询语句, 从而分析sql语句或表结构的性能瓶颈或优化方向。

explain用途

可分析得到以下信息:

  1. 表读取顺序
  2. 数据读取操作的操作类型
  3. 可使用的索引
  4. 实际使用的索引
  5. 表间引用
  6. 遍历数据行数

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 查询类型

  1. 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)
  2. 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值