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

【MySQL】知识总结——索引的类型分类和性质

常见的基于InnoDB+树索引方面(默认都是B+树)

  • 聚簇索引(主键索引):

                非叶子节点存储主键和页号

                叶子节点存储完整数据,双向链表结构,便于范围查询

                快速定位页,非记录

  • 非聚簇索引(非主键索引——辅助索引,二级索引):

                叶子节点仅存储索引列和主键,不包含完整数据

PS:使用select * 会引起回表(先通过二级索引查到ID,再去主键索引查询非索引列数据),由于ID不连续,主键索引造成大量随机I/O操作,频繁回表效率低。

索引性质方面

  • 普通索引(二级索引——由非主键列构建的索引,辅助索引)
  • 主键索引
  • 唯一索引
  • 全文索引
  • 空间索引

索引的最左前缀匹配原则

        MySQL在利用索引进行查询时,查询条件从最左边开始逐个字段匹配,直到遇到第一个不能匹配的字段为之。主要用于联合索引

1)联合索引等于查询字段——根据顺序定位索引中的相应位置,再检索记录。

2)查询字段中缺少联合索引的部分字段——也会利用索引进行查询,仅限于使用索引的前缀部分。

3)查询索引后缀字段——查询没有涉及到索引的左边部分,不能使用联合索引,可能会使用全表扫描,导致效率降低。

4)查询语句包含范围查询,列如>、<、between、like,停止使用联合索引来优化查询。

索引下推

        减少回表查询,提高查询效率的技术。将部分带有索引的条件交由存储引擎层进行过滤操作减少了I/O(本该由Server层操作,交由存储引擎层因此叫做“下推”)PS:索引下推是应用在联合索引上的。

没有使用索引下推

        1)通过索引找到主键ID数据。

        2)通过主键ID查询完整数据行,回表操作。

        3)数据交由Server层,将满足条件的数据过滤出得到最终数据行。

使用索引下推

        1)通过索引找到主键ID数据。

        2)联合索引内字段,直接在存储引擎进行索引过滤,得到最终主键ID。

        3)通过主键ID回表查询得到完整数据。

注意事项

        1)MySQL5.6版本以后支持,InnoDB和MySAM

        2)查询中引用子查询索引下推可能不会生效。

        3)使用了函数或表达式索引下推也不能生效。

        4)使用聚簇索引(主键)查询,也不会生效,因为是对于非簇聚索引来减少回表次数


http://www.kler.cn/a/319425.html

相关文章:

  • Spring Boot 中的全局异常处理器
  • 详解基于C#开发Windows API的SendMessage方法的鼠标键盘消息发送
  • 【练习案例】30个 CSS Javascript 加载器动画效果
  • 时间管理的三个痛点
  • 《MYSQL45讲》误删数据怎么办
  • 类别变量分析——卡方独立性检验卡方拟合优度检验
  • 2023国赛C题 蔬菜类商品的自动定价与补货决策(上)
  • Spring Boot 中实现动态列导入讲解和案例示范
  • element plus上传文件 点击确认后文件上传到接口
  • Java项目实战II基于Java+Spring Boot+MySQL的车辆管理系统(开发文档+源码+数据库)
  • 【Java】将一个List拆分使用线程池多线程运行
  • linux进程间通信——消息队列、信号量、ipc设计原理
  • 梧桐数据库(WuTongDB):向量化查询优化器的一些实现细节
  • 傅里叶变换及其应用笔记
  • 使用dom-to-image截图html区域为一张图
  • Redis --- redis事务和分布式事务锁
  • 全栈杂谈第三期 我们用的网络协议是什么
  • 前端css样式覆盖
  • 我的AI工具箱Tauri版-MicrosoftTTS文本转语音
  • 24.9.23学习笔记
  • “永辉优品”会是中国零售的答案吗?
  • 通信工程学习:什么是WLAN无线局域网
  • Python 从入门到实战28(文件的读操作)
  • 从王卫在全球可持续交通高峰论坛上的发言,透视顺丰的变革逻辑
  • [Unity Demo]从零开始制作空洞骑士Hollow Knight第十集:制作后坐力系统Recoil和小骑士的生命系统和受伤系统
  • docker容器安装nginx