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

2023-11-07

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是一个确定的常量

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL:explain结果中Extra:Impossible WHERE noticed after reading const tables 的相关文章

  • 在 MySQL 中对整数字段运行带引号的数字(字符串)查询时会发生哪些复杂情况

    在 SQL 中 不应引用整数 因为如果引用 它将是一个字符串 但我很好奇如果我这样做会出现什么问题 并发症 例如 SELECT FROM table WHERE id 1 正确的 vs SELECT FROM table WHERE id
  • 只获取倒数第二条记录 - mysql-query

    我有一个如下表记录 my table id rating description 1 0 0 bed 2 1 0 good 3 0 0 bed 4 1 0 good 5 0 0 bed 6 0 0 bed 7 0 0 bed 现在我通过评级
  • @GenerateValue(strategy = GenerationType.SEQUENCE) 和 startVaule

    当在 Hibernate 中使用 GeneeratedValue Annotation 并向数据库添加新实体时 它的 id 为 1 n 是否可以设置第一个值 以便获得 id 例如10000 n 序列样式生成器应该做到这一点 Generate
  • PostgreSQL 中“-”处或附近的语法错误

    我正在尝试运行查询来更新用户密码 alter user dell sys with password Pass 133 但因为 它给了我这样的错误 ERROR syntax error at or near LINE 1 alter use
  • 使用Perl/DBI/MySQL/InnoDB查找外键信息

    我想以编程方式查找 MySQL 数据库中特定 InnoDB 表的外键 我正在使用 Perl 我偶然发现 dbh gt foreign key info 我刚刚尝试使用它 但似乎有点错误 它不会返回 ON DELETE 和 ON UPDATE
  • 无法在 Mac 上启动 MySQL

    使用 Brew 安装后 我无法运行 MySQL 我使用的是 OS X El Capitan 版本 10 11 3 和 MySQL Server 版本 5 7 11 当我启动服务器时 我收到 启动 MySQL 错误 服务器退出而不更新 PID
  • 如何在 MySQL 中测试 Select for Update

    我正在表演SELECT FOR UPDATE或 InnoDB 表的行级锁定 我的目的是只有一个请求可以读取同一行 因此 如果两个用户同时请求相同的数据 其中只有一个人获取数据 即第一个触发查询的人 但是我如何测试锁定是否已放置 因为我正在通
  • mysql 中的二进制、十六进制和八进制值

    我对在 mysql 数据库中使用二进制 十六进制和八进制系统非常感兴趣 首先 请给我一个建议 为什么我们在存储信息时需要它们 因为信息太多 或者为什么 另外 哪种类型的值必须存储在标记系统中 另外这里还有像 这是例子 gt SELECT 5
  • 非常大的字段会对 MySQL 数据库产生负面影响吗?

    我目前正在使用 Django 构建一个网站 并希望托管用户生物样式页面 该页面可能长达几 KB 这些字段不一定需要搜索 但在查找用户名时确实需要提供 将这些数据存储在数据库中会产生负面影响吗 如果我使用带有数据库链接的静态文本文件 我的服务
  • PHP MySql 百分比

    我的问题是关于百分比 我不是专家 所以我会尽力以更好的方式进行解释 我的 mysql 服务器中有一个表 假设有 700 条记录 如下所示 Name country language Birth Lucy UK EN 1980 Mari Ca
  • 如何通过 SQL 表关联 SQL 中的实体

    我是数据库设计的初学者 我需要为项目创建数据库 我可以用面向对象的术语解释我想要做什么 值得庆幸的是 数据库专家会很友善地向我解释如何在数据库方面处理这个问题 我想创建一个与位置实体 州 城市 有关系的用户 ID 名称 实体 所以在编程语言
  • PHP MySQL 使用选项/选择 HTML 表单标签进行多重搜索查询

    我正在尝试使用两个搜索字段设置基本的 MySQL LIKE 搜索 我不想拥有它 所以它有多个可选搜索字段 例如if isset POST city isset POST name 我不知道如何用 HTML 来做到这一点
  • SQLite中的ROWID是自动设置的吗?

    所以 我在 Ionic 上有这个应用程序 它使用SQLite ngCordova 插件 https github com litehelpers Cordova sqlite storage用于内部存储 在其上 我使用以下命令创建一个表 d
  • 如何通过Elasticsearch模糊匹配电子邮件或电话?

    我想通过 Elasticsearch 对电子邮件或电话进行模糊匹配 例如 匹配所有以以下结尾的电子邮件 gmail com or 匹配所有电话开头136 我知道我可以使用通配符 query wildcard email gmail com
  • posts_search 中的自定义查询

    如何使用此查询作为我的自定义搜索查询 add filter posts search my search is perfect 20 2 function my search is perfect search wp query sWord
  • 无法在 Sqlite3 中添加默认值为 NULL 的 NOT NULL 列

    尝试将 NOT NULL 列添加到现有表时出现以下错误 为什么会发生这种情况 我尝试了 rake db reset 认为现有记录是问题所在 但即使重置数据库后 问题仍然存在 你能帮我解决这个问题吗 迁移文件 class AddDivisio
  • 从Django中具有外键关系的两个表中检索数据? [复制]

    这个问题在这里已经有答案了 This is my models py file from django db import models class Author models Model first name models CharFie
  • 随机组合 MySQL 数据库中的两个单词

    我有一个包含名词和形容词的数据库 例如 id type word 1 noun apple 2 noun ball 3 adj clammy 4 noun keyboard 5 adj bloody ect 我想创建一个查询 它将抓取 10
  • Mysql插入表后不显示右单引号(’)

    我有一个名为 测试 的表 我插入了一行 其中包含unicode字符右单引号 0x2019在名称字段中 SQL insert into Testing values Sno Name Address insert into Testing v
  • MySQL 转储未知选项“-no-beep”

    在旧服务器上我使用了mysql转储命令来备份 MySQL 数据库 在新服务器上 MySQL 版本为 5 6 相同的命令给出了错误 unknown option no beep 无论它插入什么 我也在互联网上搜索过 但找不到任何帮助 在 my

随机推荐

  • 最近跳槽了,历经华为测试岗4轮面试,3个小时灵魂拷问,透心凉结局.....

    大多数情况下 测试员的个人技能成长速度 远远大于公司规模或业务的成长速度 所以 跳槽成为了这个行业里最常见的一个词汇 前几天 我看到有朋友留言说 他在面试华为的自动化测试工程师的时候 灵魂拷问三小时 不幸挂掉了 越想越可惜 回想面试经过 好
  • 比double精度更高的数据类型_Oracle数据类型总结

    ORACLE基本数据类型 亦叫内置数据类型 built in datatypes 可以按类型分为 字符串类型 数字类型 日期类型 LOB类型 LONG RAW RAW类型 ROWID UROWID类型 1 1字符类型 字符串数据类型还可以依
  • matlab function的使用

    首先创建一个m文件 Matlab函数定义格式 用关键字function定义函数 function 输出变量 函数名称 输入变量 注释 函数体 简单的函数如下 function a b c test d e f a d e b e f c f
  • 下载工具IDM之——无法下载此受保护的数据其他解决方案

    一 现象描述 在使用IDM进行直播流数据下载时 可能会显示如下信息 二 解决办法 2 1 使用ffmpeg 下载配置ffmpeg后 使用下面的指令合成视频 ffmpeg i http ivi bupt edu cn hls cctv1hd
  • ABAP DOI展示EXCEL或WORD

    正文部分 DOI技术算是比较老的技术了 用来直接调用office展示结果 可以是EXCEL也可以是WORD data begin of s fal include structure faglflext data end of s fal
  • 统计假设检验

    1 假设检验基本思想 假设检验是由K Pearson于20世纪提出的 之后由费希尔 Fisher 进行了细化 并最终由奈曼和E Pearson提出了较完整的假设检验理论 假设检验的基本思想是 小概率事件 原理 其统计推断方法是带有某种概率性
  • 解决SpringMVC重定向参数无法携带问题

    解决SpringMVC重定向参数无法携带问题 场景 重定向时请求参数会丢失 我们往往需要重新携带请求参数 我们可以进 动参数拼接如下 return redirect handle01 name name 但是上述拼接参数的 法属于get请求
  • 关于使用流进行排序

    关乎流中的排序 使用collections的sort函数进行排序 不改变属性值 只会改变位置 public void setResultListByTime List
  • java匹配注释的正则表达式

    参考http iregex org blog uncomment program with regex html 通用注释有两种 1 2 通常情况下 行级注释可以这样匹配 n 块级别这样 或者还可以这样 s 不过在特殊情况中 行级别会跟协议
  • [附源码]计算机毕业设计学生宿舍维修管理系统Springboot程序

    项目运行 环境配置 Jdk1 8 Tomcat7 0 Mysql HBuilderX Webstorm也行 Eclispe IntelliJ IDEA Eclispe MyEclispe Sts都支持 项目技术 SSM mybatis Ma
  • ‘“node --max-old-space-size=4096“‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

    问题描述 使用npm run dev的时候报如下错误 node max old space size 4096 不是内部或外部命令 也不是可运行的程序或批处理文件 FATAL ERROR Ineffective mark compacts
  • CMD打开闪退问题修复

    CMD termain 打开闪退问题修复 Date 2022 06 01 01 问题说明 今天 VSC Remote SSH 突然无法工作 不确定是否因为我卸载 MiniConda 导致 然后开始折腾 VSC 问题如下 Could not
  • 将微信小程序页面转为图片

    最近做项目遇到一个需求 那就是要将某个页面转为图片然后传给后端 我仔细找了一圈 发现官方那个Api也就是wx canvasToTempFilePath生成的图片很有可能为空 太坑了 于是我放弃用它了 选择了用wxml2canvas 安装wx
  • MySQL索引(index)专题

    1 MySQL索引简介 索引 Index 是帮助MySQL高效获取数据的数据结构 它的存在形式是文件 索引能够帮助我们快速定位数据 它可以让mysql高效运行 大大提高mysql的查询 包括排序 分组 效率 Mysql目前主要有以下几种索引
  • 程序员面试题精选100题(04)-二元树中和为某一值的所有路径

    程序员面试题精选100题 04 二元树中和为某一值的所有路径 题目 输入一个整数和一棵二元树 从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径 打印出和与输入整数相等的所有路径 例如输入整数22和如下二元树 10 5 12
  • 集合的父子类关系

    一 Collection的父子类关系 1 Iterable java集合的顶级接口之一 实现此接口的类可以使用新的for循环2 Iterator 接口 遍历器 ListIterator 方法 hasNext next remove 3 Co
  • openstack对接gluster流程

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 在已经部署好的gluster集群里创建相应的卷 可参考https my oschina net u 857184 blog 1506552 mkdir p data bri
  • 还分不清 Cookie、Session、Token、JWT?

    什么是认证 Authentication 通俗地讲就是验证当前用户的身份 证明 你是你自己 比如 你每天上下班打卡 都需要通过指纹打卡 当你的指纹和系统里录入的指纹相匹配时 就打卡成功 互联网中的认证 用户名密码登录 邮箱发送登录链接 手机
  • vscode查询项目代码行数

    vscode版本 4 13 1 1 打开vscode搜索 2 在输入框中输入 b b 并选择输入框内第三个图标使用正则表达式 3 结果出来了 最近知道了另外一个方法 使用命令行进行统计 例如只统计src内代码行数 直接使用git bash执
  • MySQL:explain结果中Extra:Impossible WHERE noticed after reading const tables

    MySQL explain结果中Extra Impossible WHERE noticed after reading const tables 前情提要 出现的情况 原因 前情提要 今天上午有同事突然找我 向我反馈说在对MySQL中的语