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

MySQL索引下推

文章目录

  • 索引下推
    • 为什么范围查找Mysql没有用索引下推优化?

说到索引下推,应该会有不少人对它很陌生的,那么什么是索引下推,今天我们就来谈谈它到底是什么样?

索引下推

索引下推:MySQL 5.6 引入的索引下推优化(Index Condition Pushdown,简称ICP), 可以在索引遍历过程中,对索引中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数。like KK%其实就是用到了索引下推优化。

例如对于辅助的联合索引(name,age,position),正常情况按照最左前缀原则,SELECT * FROM employees WHERE name like ‘LiLei%’ AND age = 22 AND position =‘manager’ 这种情况只会走name字段索引,因为根据name字段过滤完,得到的索引行里的age和position是无序的,无法很好的利用索引。

在MySQL5.6之前的版本,这个查询只能在联合索引里匹配到名字是 ‘LiLei’ 开头的索引,然后拿这些索引对应的主键逐个回表,到主键索引上找出相应的记录,再比对age和position这两个字段的值是否符合。MySQL 5.6引入了索引下推优化,可以在索引遍历过程中,对索引中包含的所有字段先做判断,过滤掉不符合条件的记录之后再回表,可以有效的减少回表次数。使用了索引下推优化后,上面那个查询在联合索引里匹配到名字是 ‘LiLei’ 开头的索引之后,同时还会在索引里过滤age和position这两个字段,拿着过滤完剩下的索引对应的主键id再回表查整行数据。索引下推会减少回表次数,对于innodb引擎的表索引下推只能用于二级索引,innodb的主键索引(聚簇索引)树叶子节点上保存的是全行数据,所以这个时候索引下推并不会起到减少查询全行数据的效果。

回表:当查询的数据在索引树中找不到的时候,需要回到主键索引树中去获取,这个过程叫做回表。

为什么范围查找Mysql没有用索引下推优化?

估计应该是Mysql认为范围查找过滤的结果集过大,like KK% 在绝大多数情况来看,过滤后的结果集比较小,所以这里Mysql选择给 like KK% 用了索引下推优化,当然这也不是绝对的,有时like KK% 也不一定就会走索引下推。

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

相关文章:

  • 代码随想录刷题题Day3
  • GO学习之 单例模式 sync.Once
  • 应用安全四十三:无密码认证安全
  • Lattice-Based Blind Signatures: Short, Efficient, and Round-Optimal
  • Qt/C++音视频开发57-切换音视频轨道/切换节目流/分别切换音频视频轨道
  • 深度学习之基于Django文本情感分析识别系统
  • 138. 随机链表的复制 --力扣 --JAVA
  • Python Flask 框架开发
  • k8s安装-学习环境
  • Vue3动态表单
  • 2312skia,15vulkan及技巧
  • TLSF算法概念,原理,内存碎片问题分析
  • sharding-jdbc实现分库分表
  • JDK中lock锁的机制,其底层是一种无锁的架构实现的,公平锁和非公平锁
  • c++通过serial库进行上下位机通信
  • 【傻瓜级JS-DLL-WINCC-PLC交互】7.​C#直连PLC并读取PLC数据
  • 指针常量和常量指针的区别
  • 离散化算法总结
  • 【海思SS528 | VO】MPP媒体处理软件V5.0 | VO模块编程总结
  • 逻辑卷管理器lvm
  • 函数声明后的“ - >”是什么?
  • 51爱心流水灯32灯炫酷代码
  • 将不同时间点的登录状态记录转化为不同时间段的相同登录状态SQL求解
  • 正则表达式与SQL数据库教程
  • HTML_web扩展标签
  • 论文阅读:Distributed Initialization for VVIRO with Position-Unknown UWB Network
  • scrapy爬虫中间件和下载中间件的使用
  • 手敲单链表,简单了解其运行逻辑
  • Redis RDB
  • Elasticsearch一些函数查询