MySQL通过explain分析时,possible_keys为null,key为所建索引的原因

分析

首先我们知道:possible_keys为可能使用的索引;key为实际使用的索引,按照逻辑讲第一个为null

那么第二个也应该为null才对。

原因

在这里插入图片描述
这种情况一般发生在覆盖索引条件下,possible_keysnull说明用不上索引的树形查找,但如果二

级索引包含了所有要查找的数据,二级索引往往比聚集索引小,所以mysql可能会选择顺序遍历这个二

级索引直接返回,但没有发挥树形查找优势,所以就出现了这个情况。

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
这是一个关于查询执行计划的输出结果,它是通过执行 `EXPLAIN [查询语句]` 命令得到的。以下是各个列的含义: - `id`: 查询中查询块的唯一标识符,可以用来分析查询中不同部分的性能。 - `select_type`: 查询的类型,可以是 `SIMPLE`(简单查询)、`PRIMARY`(最外层查询)、`SUBQUERY`(子查询)等等。 - `table`: 查询涉及的表名。 - `type`: 查询使用的连接类型,常见的有 `const`(常量)、`eq_ref`(唯一索引)、`ref`(非唯一索引)、`range`(范围查询)、`index`(索引扫描)和 `ALL`(完全扫描)等等。 - `possible_keys`: 可能使用的索引,是一个逗号分隔的索引列表。 - `key`: 实际使用的索引。 - `key_len`: 使用的索引长度。 - `ref`: 使用的索引或常量的列名。 - `rows`: 估计的行数,这个值越小越好。 - `Extra`: 额外的信息,如使用了哪些优化器、是否使用了临表等等。 对于这个查询执行计划,它使用了一个主查询和一个子查询。主查询的表名为 `a`,使用了全表扫描(`type` 为 `ALL`),并且使用了 `where` 子句进行过滤。子查询的表名为 `b`,使用了常量连接(`type` 为 `const`),说明它只会返回一行结果。子查询使用了 `PRIMARY` 索引或 `idx_left` 或 `idx_right` 索引进行访问,这意味着它会使用索引扫描或唯一索引查找。最后,这个查询计划中没有使用额外的优化器或临表。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值