MySql中的索引

什么是索引

索引是数据库系统中的一种数据结构,它可以帮助我们快速检索数据,类似于书本的目录。

数据库中的数据都是存储在磁盘上的,而对磁盘进行IO操作相比于CPU的寄存器、内存来说效率是非常慢的,所以对磁盘进行访问一直是程序运行效率的痛点,如何高效的访问磁盘数据成为了急需解决的问题,索引由此而生。

B树与B+树的区别

在MySQL中,最常使用的索引就是B+树,而B+树是B树的增强版,为了更好说明B+树的特性,我们先对B树进行了解。

B树

B树是一种多叉树的数据结构,它与二叉树、红黑树、AVL树最主要的区别在于它有多个分叉,具体有多少个分叉取决于节点的度数(Degree)。

B+树

区别

  • 数据存储位置:B树每个节点有存储数据,B+树只会将数据存储在叶子节点;
  • 叶子节点结构:B树的叶子节点是独立的,而B+树的叶子节点之间会相互持有地址,形成双向链表结构。

因为这两个区别,会导致不同的查询特性:

  • 因为数据存储位置的不同,同样的规模的数据,B树的深度会比B+树更深,如果访问的数据是存在叶子节点中,那么访问IO的次数也就更多,但是如果访问的数据在根节点,那么就会直接命中返回。所以B树访问IO的次数不稳定,B+树相对来说更加稳定一些。
  • 因为叶子节点的结构问题,B树的范围查询及排序效率会很慢,而B+树叶子节点是有序的双向链表,所以范围查询及排序效率会很高。

聚簇索引与非聚簇索引

聚簇索引即索引值跟数据在同一个文件,这个索引通常是主键或者唯一键,可以快速定位到数据。

非聚簇索引即索引值跟数据不在同一个文件,该索引保存的值是聚簇索引中的索引值,所以通过非聚簇索引查询可能会进行回表操作。

组合索引

组合索引是指一张表中多个字段组成的索引,该索引的使用涉及到最左匹配原则,也就是说在查询时,如果需要用到组合索引,必须按照组合索引从左到右的顺序进行查询,否则可能不会走索引。

索引覆盖

如果查询的字段在索引值中已经存在,则不需要再去叶子节点获取数据,直接返回即可。

相关推荐
合作小小程序员小小店20 小时前
web网页开发,在线%档案管理%系统,基于Idea,html,css,jQuery,java,ssh,mysql。
java·前端·mysql·jdk·html·ssh·intellij-idea
合作小小程序员小小店20 小时前
web网页开发,在线%物流配送管理%系统,基于Idea,html,css,jQuery,java,ssh,mysql。
java·前端·css·数据库·jdk·html·intellij-idea
2501_9411429320 小时前
基于区块链的数字身份管理:探索安全与隐私的未来
网络·数据库·人工智能
LoneEon20 小时前
Ubuntu 上搭建 Redis 3 节点集群(6 实例:3主3从)
数据库·redis·缓存
chxii21 小时前
在 Spring Boot 中,MyBatis 的“自动提交”行为解析
java·数据库·mybatis
wind_one121 小时前
13.基础--SQL--DQL-聚合函数
数据库·sql
猿小喵21 小时前
浅谈MySQL的redo日志
数据库·mysql
陳陈陳1 天前
AIGC 时代,用自然语言操作数据库:SQLite + LLM 的轻量级实践
前端·数据库·python
用户7227868123441 天前
MySQL高级运维核心技术:事务处理、安全管理与性能优化
mysql
AI绘画小331 天前
【网络安全】Wireshark 抓包过滤:源 / 目的 IP 过滤 + 命令大全
数据库·tcp/ip·测试工具·安全·web安全·wireshark