当前位置: 首页 > news >正文

《MySQL学习》 索引失效的三种特殊情况

一.条件字段使用函数

explain select * from bpm_proc_instance bpi where CREATED_AT >= '2022-06-01' 

CREATED_AT 字段建立了索引,此时explain分析的结果表明能使用到索引

image-20230227173114052

但如果我们对 CREATED_AT 字段使用函数

explain select * from bpm_proc_instance bpi where month(CREATED_AT) = 6 ;

image-20230227173319192

此时可以看到已经没有使用索引了

因为对字段使用函数后,从根节点开始,索引就不知道如何选择了。B+树的快速定位能力,来源于同一层兄弟节点的有序性。

二.隐式类型转换

如果某个字段是字符串类型的,使用where进行判断时,如果与之比较的是数字类型的值,那么将导致索引失效

select * from log where no = 110717;

如上SQL所示,如果声明字段时,no 是varchar类型的,那么此时会将SQL转换为

select * from log where cast(no as signed int) = 110717

变相的对 no 字段使用了函数 也将导致索引失效。

但如果 no 字段是 int类型的,此时我们执行以下SQL

select * from log where no = '110717';

索引是不会失效的。因为MySQL在数字与字符串做比较时,会将字符串转换为数字进行比较。因此,此时的SQL相当于

select * from log where no = cast('110717' as signed int);

并没有在条件字段上加上索引

三.隐式字符编码转换

SELECT * FROM T1 LEFT JOIN T2 ON T1.ID=T2.TID

上述SQL,如果 T1表中的 ID 字段 与 T2 表中的 TID 字段 使用的不是同一种字符编码,也会导致索引失效。

http://www.lryc.cn/news/22989.html

相关文章:

  • wafw00f 防火墙探测
  • MySQL学习(1)[参考书籍:mysql是怎么运行的]
  • 用Python制作邮件检测器
  • K8S---pod基础概念
  • 激活函数入门学习
  • 小文智能结合ChatGPT的产业未来
  • Linux-编写一个自己的命令
  • Nacos架构篇 - Distro协议
  • 和月薪3W的聊过后,才知道自己一直在打杂...
  • 关于Ubuntu18.04 root账户登录的问题
  • 基于jeecgboot的flowable的H5版本在演示系统发布
  • 【代码训练营】day44 | 完全背包理论 518. 零钱兑换 II 377. 组合总和 Ⅳ
  • ICA简介:独立成分分析
  • ②【Java 组】蓝桥杯省赛真题解析 [振兴中华] [三部排序] 持续更新中...
  • PostgreSql 视图
  • 【PAT甲级题解记录】1150 Travelling Salesman Problem (25 分)
  • vue生命周期
  • 排查解决Java进程占用内存过高
  • 一个基于 LKM 的 Linux 内核级 rootkit 的实现
  • CAN工具 - ValueCAN - 基础介绍(续)
  • 一个Laravel+vue免费开源的基于RABC控制的博客系统
  • 从 B 站出发,用 Chrome devTools performance 分析页面如何渲染
  • Java异常Throwable的分类
  • 【mybatis的#和$使用和区别】
  • 感知趋势,洞察发展:2023(第十届)趋势与预测大会成功举办
  • Spring-Aop核心技术
  • webpack常用优化原理剖析
  • 【现在努力还不晚】--MySQL数据库的数据模型
  • 二手商品交易网站
  • 第三阶段04-同步请求和异步请求,get/post,Josn,pojo,Session/Cookie,过滤器Filter