MySQL:explain结果中Extra:Impossible WHERE noticed after reading const tables

  • 前情提要
    • 出现的情况
      • 原因

前情提要

今天上午有同事突然找我,向我反馈说在对MySQL中的语句进行explain解析的时候,explain的结果中table、type、possible_keys、key等关键性字段都是空的,什么信息都得不到,而当把其中一个字段phone,类型是varchar的单引号去掉了之后,也就是说把where phone='13800138000'改为where phone=13800138000之后,再执行explain就能得到explain的关键性字段的结果了,这个就让我很纳闷,不合常理啊,字段的隐式转换正常来说这种情况应该会导致索引失效才对啊,现在竟然是反之生效,刷新了我们的认知。我就说了下面一句话:

一个不合常理的现象往往都是由于一个不起眼的或者平时被我们忽略的点所造成的

出现的情况

这种非常理所能解释通的现象,引起了我的好奇心。

从上图中看到Extra:Impossible WHERE noticed after reading const tables,字面上的意思是:读取const tables表之后,没有发现匹配的行。其实,这个跟MySQL的版本有关,在 MySQL 5.7.17 下的执行结果中可以发现同样的表结构、同样的数据、同样的查询语句,Extra 中的显示的内容为“no matching row in const table”,这句话理解起来就容易多了。

原因

产生“ Impossible WHERE noticed after reading const tables”的原因是这样的,MySQL在 EXPLAIN 之前会优先根据这一条件查找出对应的记录,并用记录的实际值替换查询中所有使用到的该表属性。这是因为满足以下四个条件时,就会使得针对该表的查询最多只能产生一条命中结果,在该表无法命中数据的情况下就会提示“在 const table 表中没有找到匹配的行”,而这个 “const table”就指的是满足下面四个条件的表。这是 MySQL 的一个优化策略。

  • 当查询条件中包含了某个表的主键或者非空的唯一索引列
  • 该列的判定条件为等值条件
  • 目标值的类型与该列的类型一致
  • 目标值为一个确定的常量

而我们的这张表user_info的这个查询语句刚好符合这4个条件,原因:
1、phone是非空的唯一索引列;
2、phone= '13800138000’是等值条件
3、phone是字符串类型,'13800138000’也是字符串类型
4、13800138000是一个确定的常量

MySQL:explain结果中Extra:Impossible WHERE noticed after reading const tables相关推荐

  1. MySQL:浅析 Impossible WHERE noticed after reading const tables

    使用 EXPLAIN 执行计划的时候,在 Extra 中偶尔会看到这样的描述: Impossible WHERE noticed after reading const tables 字面上的意思是: ...

  2. MySQL:Impossible WHERE noticed after reading const tables

    Impossible WHERE noticed after reading const tables 阿里云反馈的慢SQL //sql如下 select * from table where req ...

  3. mysql explain desc_MySQL中EXPLAIN命令详解

    explain显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. 使用方法,在select语句前加上explain就可以了: 如: mysql ...

  4. Explain信息中Extra字段解释

    文章目录 explain 执行计划中 extra 常见内容说明 extra 字段内容 Using filesort Using temporary Using index Using index co ...

  5. mysql explain 分析中select_type列解释

  6. mysql explain字段含义,MySQL(十七):EXPLAIN 输出信息之 Extra 字段解释

    Child of 'table' pushed join@1 (JSON: message text) This table is referenced as the child of table i ...

  7. (mysql) EXPLAIN语法

    MySQL Explain功能中展示各种信息的解释. 1.ID:MySQL Query Optimizer选定的执行计划中查询的序列号. 2.Select_type:所使用的查询类型,主要有以下这几种 ...

  8. 【全网最全】 |MySQL EXPLAIN 完全解读

    TIPS 本文基于MySQL 8.0编写,理论支持MySQL 5.0及更高版本. EXPLAIN使用 explain可用来分析SQL的执行计划.格式如下: 1 2 3 4 5 6 7 8 9 10 1 ...

  9. mysql explain使用方法

    explain就是SQL的执行计划,通过执行计划,我们可以了解sql的执行当中的一些细节. 使用方法为在SQL语句前加explain 得到结果如下: mysql> explain select ...

  10. mysql explain extended_MySQL EXPLAIN extended

    手册上关于EXPLAIN语法的讲解: 12.8.2. EXPLAIN Syntax EXPLAIN [EXTENDED] SELECT select_options Or: EXPLAIN tbl_n ...

最新文章

  1. 关于page object(PO)模型的介绍
  2. 艾伟_转载:string类与StringBuilder类性能比较
  3. sqplus操作oracle,sqlplus操作oracle
  4. C语言那点事——如何从零学好C语言?
  5. Web前端体系的脉络结构
  6. JVM :执行jinfo命令报错Can't attach symbolicator to the process
  7. 秋意来袭,这些清新促销海报不容错过!
  8. P问题、NP问题、NPC问题、NP hard问题
  9. gwas snp 和_新的高密度玉米SNP芯片可用于基因组选择、GWAS和群体遗传学
  10. 华为6个月试用期经历
  11. dedecms 自定义表单html,dedecms自定义表单和自定义表单如何用自己模板教程
  12. matlab方程求解的实验报告,用matlab对微分方程求解实验报告.doc
  13. Nova Battles是2022年值得关注的链游
  14. 勇敢跨越,从0到1开发一个属于自己的App
  15. Matlab代码:综合能源系统(IES)的优化调度 风力、光伏、燃气轮机、燃气内燃机、燃气锅炉、余热回收系统、吸收式制冷机、电制冷机
  16. 劳动保障协管员计算机考试,劳动保障协管员考试题
  17. ThinkPHP源码阅读理解
  18. C++图形时钟(画图入门篇)
  19. 前 端 图 床
  20. 关于肾结石5个知识介绍

热门文章

  1. Maven 中的cannot Resolve情况
  2. vue实现60秒倒计时
  3. 如何免费下载论文资料
  4. 台式计算机通讯串口在哪,如何给台式电脑扩展串口
  5. android开发一款app的流程
  6. 阿里云Blink快速入门
  7. 阿里云服务器 免费获取SSL证书 配置HTTPS安全访问
  8. 东方时尚驾校科目一网上视频快速通过方法
  9. 螺栓预紧力与拧紧力矩的计算方法
  10. 记一次修复Mac和Win7双系统启动菜单的经历