欢迎来到IDC91站长网!
解决服务器各种技术问题,加微信uecomzsr

MySQL

当前位置: IDC91 > 数据库 > MySQL

Mysql 5.6 "隐式转换"导致的索引失效和数据不准确的问题

时间:2022-05-30 13:59:56|栏目:MySQL|点击:

背景

  • 在一次进行SQl查询时,我试着对where条件中vachar类型的字段去掉单引号查询,这个时候发现这条本应该很快的语句竟然很慢。这个varchar字段有一个复合索引。其中的总条数有58989,甚至不加单引号查出来的数据不是我们想要的数据。
  • 使用的是mysql 5.6版本,innoDB引擎 实际情况如下

下面我们来看一下执行的结果

在这里插入图片描述

在上面的描述中我们还得注意就是,你的where条件的字符串不加单引号必须是全数字。不然就会报错

在这里插入图片描述

还有可能查出来的数据不是我们想要的数据。如下图

在这里插入图片描述

分析

  1. 从执行结果来看,使用了单引号的走了对应的索引。没有使用单引号的没有走索引,进行了全表扫描。
  2. 为什么会这样呢? mysql的优化器怎么不直接进行类型转换呢?
  • 在SQL语句中单引号的引入也就是代表这个类型是字符串数据类型CHAR, VARCHAR, BINARY, VARBINARY, BLOB, TEXT, ENUM,和 SET。。
  • 不加单引号也就代表这是一个字符串之外的类型,如int,bigDecimal类型等
  • 如果给一串有字幕和特殊符号的字符串不加单引号,后果就是类型转换失败导致SQl不能执行。

如上图所述:

1054 - Unknown column '000w1993521' in 'where clause', Time: 0.008000s

上一篇:超详细MySQL8.0.22安装及配置教程

栏    目:MySQL

下一篇:MySQL binlog_ignore_db 参数的具体使用

本文标题:Mysql 5.6 "隐式转换"导致的索引失效和数据不准确的问题

本文地址:https://idc91.com/shujuku/4144.html

广告投放 | 联系我们 | 免责申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

Copyright © 2023 IDC91.COM 版权所有晋ICP备17006296号