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

聚簇索引与非聚簇索引

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

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

组合索引

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

索引覆盖

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

相关推荐
言德斐2 小时前
SQL性能优化的思路及策略
数据库·sql·性能优化
码界奇点3 小时前
Django视图从基础到高级的全面解析
数据库·django·sqlite·web·python3.11
Allan_20253 小时前
数据库学习
数据库·学习
fen_fen3 小时前
人大金仓数据库kingbase8创建表示例
数据库·oracle
一勺菠萝丶3 小时前
「您的连接不是私密连接」详解:为什么 HTTPS 证书会报错,以及如何正确配置子域名证书
数据库·网络协议·https
²º²²এ松3 小时前
蓝牙低功耗(BLE)通信的中心设备/外围设备(连接角色)、主机/从机(时序角色)、客户端/服务器(数据交互角色)的理解
运维·服务器·数据库
百锦再4 小时前
Vue Scoped样式混淆问题详解与解决方案
java·前端·javascript·数据库·vue.js·学习·.net
数据库知识分享者小北4 小时前
云栖重磅|瑶池数据库:从云原生数据底座向“AI就绪”的多模态数据底座演进
数据库·人工智能·云原生
_Johnny_4 小时前
Redis 升级操作指南:单机与主从模式
数据库·redis·缓存
源力祁老师5 小时前
ODOO数据文件(XML、CSV、SQL)是如何转换并加载到 Odoo 数据库
xml·数据库·sql