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

 更新时间:2023年12月22日 10:43:13   作者:段晓慢  
这篇文章主要介绍了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中的排序规则

    MySQL中的排序规则

    这篇文章主要介绍了MySQL中的排序规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • mysql导入csv的4种报错的解决方法

    mysql导入csv的4种报错的解决方法

    这篇文章主要介绍了mysql导入csv的4种报错的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • MySQL与SQL Server的一些区别浅析

    MySQL与SQL Server的一些区别浅析

    这篇文章主要介绍了MySQL与SQL Server的一些区别浅析,本文罗列了MySQL与SQL Server的25个不同的地方,并对它们的分页技术的不同做了讲解,需要的朋友可以参考下
    2014-08-08
  • MLSQL编译时权限控制示例详解

    MLSQL编译时权限控制示例详解

    这篇文章主要给大家介绍了关于MLSQL编译时权限控制的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mysql具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • mysql创建的外键无法保存的原因以及处理办法

    mysql创建的外键无法保存的原因以及处理办法

    这篇文章主要介绍了mysql创建的外键无法保存的原因以及处理办法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • SQL中CONVERT转换函数的简单使用方法

    SQL中CONVERT转换函数的简单使用方法

    CONVERT()函数对于简单类型转换,CONVERT()函数和CAST()函数的功能相同,只是语法不同,下面这篇文章主要给大家介绍了关于SQL中CONVERT转换函数的简单使用方法,需要的朋友可以参考下
    2024-01-01
  • MySQL绿色解压缩版安装与配置操作步骤

    MySQL绿色解压缩版安装与配置操作步骤

    这篇文章主要介绍了MySQL绿色解压缩版安装与配置操作步骤,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-05-05
  • mysql全连接和oracle全连接查询、区别及说明

    mysql全连接和oracle全连接查询、区别及说明

    这篇文章主要介绍了mysql全连接和oracle全连接查询、区别及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • MySql中modify、rename、change的使用及区别

    MySql中modify、rename、change的使用及区别

    这篇文章主要介绍了MySql中modify、rename、change的使用及区别,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • MySQL 有输入输出参数的存储过程实例

    MySQL 有输入输出参数的存储过程实例

    MySQL 有输入输出参数的存储过程实例
    2009-08-08

最新评论