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+树叶子节点是有序的双向链表,所以范围查询及排序效率会很高。

聚簇索引与非聚簇索引

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

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

组合索引

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

索引覆盖

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

相关推荐
极限实验室4 分钟前
搭建持久化的 INFINI Console 与 Easysearch 容器环境
数据库
星辰离彬16 分钟前
Java 与 MySQL 性能优化:Java应用中MySQL慢SQL诊断与优化实战
java·后端·sql·mysql·性能优化
白仑色37 分钟前
Oracle PL/SQL 编程基础详解(从块结构到游标操作)
数据库·oracle·数据库开发·存储过程·plsql编程
程序猿小D2 小时前
[附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+jsp实现的个人财务管理系统,推荐!
java·数据库·mysql·spring·毕业论文·ssm框架·个人财务管理系统
钢铁男儿3 小时前
C# 接口(什么是接口)
java·数据库·c#
__风__4 小时前
PostgreSQL kv(jsonb)存储
数据库·postgresql
轩情吖4 小时前
Qt的第一个程序(2)
服务器·数据库·qt·qt creator·qlineedit·hello world·编辑框
Databend4 小时前
Databend 产品月报(2025年6月)
数据库
Little-Hu5 小时前
QML TextEdit组件
java·服务器·数据库
保持学习ing7 小时前
day1--项目搭建and内容管理模块
java·数据库·后端·docker·虚拟机