mysql中的隐式转换导致全表扫描
mysql中的隐式转换导致全表扫描
在mysql查询中,当查询条件左右两侧类型不匹配的时候会发生隐式转换,可能导致查询无法使用索引。下面分析两种隐式转换的情况
看表结构 phone为 int类型,name为 varchar

EXPLAIN select * from user where phone = '2'
EXPLAIN select * from user where phone = 2
两种情况都可以用到索引,这次等号右侧是 '2',注意带单引号哟,左侧的索引字段是int类型,因此也会发生隐式转换,但因为 int 类型的数字只有2能转化为'2',是唯一确定的。所以虽然需要隐式转换,但不影响使用索引,不会导致慢查询
EXPLAIN select * from user where name= '2'
这种情况也能使用索引,因为他们本身就是varchar 类型

EXPLAIN select * from user where name= 2
因为等号两侧类型不一致,因此会发生隐式转换,cast(index_filed as signed),然后和2进行比较。因为'2',' 2','2a'都会转化成2,故MySQL无法使用索引只能进行全表扫描,造成了慢查询的产生。

总结:发生隐式转换时,如果是把数字类型的字段写成字符串影响不是特别大,但是如果把字符类型的字段写成数字会扫描全部索引。
mysql中的隐式转换导致全表扫描的更多相关文章
- mysql不会使用索引,导致全表扫描情况
不会使用索引,导致全表扫描情况 1.不要使用in操作符,这样数据库会进行全表扫描,推荐方案:在业务密集的SQL当中尽量不采用IN操作符 2.not in 使用not in也不会走索引推荐方案:用not ...
- mysql中的隐式转换
在mysql查询中,当查询条件左右两侧类型不匹配的时候会发生隐式转换,可能导致查询无法使用索引.下面分析两种隐式转换的情况 看表结构 phone为 int类型,name为 varchar EXPLAI ...
- MySQL性能优化:MySQL中的隐式转换造成的索引失效
数据库优化是一个任重而道远的任务,想要做优化必须深入理解数据库的各种特性.在开发过程中我们经常会遇到一些原因很简单但造成的后果却很严重的疑难杂症,这类问题往往还不容易定位,排查费时费力最后发现是一个很 ...
- mysql字符串的隐式转换导致查询异常
如果mysql某个字段(name)类型为varchar, 加了索引,在执行where查询的时候,传入了int的值,这样就会全表扫描,把每一条的值都转换成int(会出现"中国"-&g ...
- ORACLE绑定变量隐式转换导致性能问题
年后一次系统升级后,监控数据库的工具DPA发现数据库的Total Wait时间突然飙增,如下截图所示,数据库的总体等待时间对比升级前飙增了非常多 另外就是发现出现了较多的等待事件,主要有latch: ...
- JavaScript中关于隐式转换的一些总结
JavaScript运算符中的隐式转换规律:一.递增递减运算符(前置.后置)1.如果包含的是有效数字字符串或者是有效浮点数字符串,则会将字符串转换(Number())为数值,再进行加减操作,返回值的类 ...
- C++中的隐式转换和explicit
隐式转换 c++中的数据类型转换分为隐式转换和显示转换: 显示转换即使用static_cast等方法进行转换,相关内容请参考 <C++数据类型转换>: 隐式转换则是编译器完成的,如,boo ...
- C#中的隐式转换
你是否考虑过这个问题:为什么不同类型之间的变量可以赋值,而不需要强制转换类型?如: int i = 1; long l = i; object obj = 1; Exception exception ...
- 如何优雅的使用 参数 is null而不导致全表扫描(破坏索引)
相信大家在很多实际业务中(特别是后台系统)会使用到各种筛选条件来筛选结果集 首先添加测试数据 ), Age INT) go CREATE INDEX idx_age ON TempList (Age) ...
- Scala 中的隐式转换和隐式参数
隐式定义是指编译器为了修正类型错误而允许插入到程序中的定义. 举例: 正常情况下"120"/12显然会报错,因为 String 类并没有实现 / 这个方法,我们无法去决定 Stri ...
随机推荐
- navicat 如何调整查询区域字体大小
Navicat是一套快速.可靠和全面的数据库管理工具,专门用于简化数据库管理和降低管理成本.Navicat图形界面直观,提供简便的管理方法,设计和操作MySQL.MariaDB.SQL Server. ...
- EF CORE 遇到“无法打开登录所请求的数据库 "win7bc"。登录失败。”
报错内容:ex:An exception has been raised that is likely due to a transient failure. Consider enabling tr ...
- .net执行oracle查询语句报错“指定的转换无效”解决方案
问题: .net执行oracle查询语句报错"指定的转换无效",在PL/SQL中正常: SELECT A.ID,SUM(TO_NUMBER(A.MODIFYTIME-A.UPLOA ...
- reids分片技术cluster篇
为什么学redis-cluster 前面两篇文章,主从复制和哨兵机制保障了高可用 就读写分离,而言虽然slave节点扩展了主从的读并发能力 但是写能力和存储能力是无法进行扩展,就只能是master节点 ...
- Scrapy框架(九)--分布式爬虫
分布式爬虫 - 概念:我们需要搭建一个分布式的机群,让其对一组资源进行分布联合爬取. - 作用:提升爬取数据的效率 - 如何实现分布式? - 安装一个scrapy-redis的组件 爬取到的数据自动存 ...
- idea 中的 jrebel
1.打开idea设置 ,下载 jrebel 2搜索下载jrebel 3.重启之后,在右下角有个弹窗,这时候选择enable,然后右边的侧边栏工具会弹出一个界面,总共应该有4步,第一步是展开的,点击蓝色 ...
- springboot增加@EnableAsync注解,否则方法中的@Async注解没有生效
springboot增加@EnableAsync注解,否则方法中的@Async注解没有生效. @EnableFeignClients(basePackages = {"com.test&qu ...
- SHOW PROCESSLIST 最多能显示多长的 SQL?
在 MySQL 中,如果我们想查看实例当前正在执行的 SQL,常用的命令是SHOW PROCESSLIST. 但如果 SQL 过长的话,就会被截断.这时,我们一般会用SHOW FULL PROCESS ...
- 这几个必备的vscode插件,你安装了几个
作为一名前端开发者,vscode想必大家应该都接触过,就像大多数 IDE 一样,VSCode 也有一个扩展和主题市场,包含了数以千计质量不同的插件. 作为一名熟练掌握各种前端开发工具安装和卸载的大师兄 ...
- java多线程-2-概念和实现机制
知其然,而知其所以然! 在计算机领域,有多种操作系统,常见的有windows家族和unix/Linux家族,它们都支持多任务的计算模式. 它们实现多任务的机制是差不多的,这点在<<操作系统 ...