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

聚簇索引与非聚簇索引

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

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

组合索引

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

索引覆盖

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

相关推荐
jump_jump32 分钟前
Drizzle 凭什么贴着 Go 跑——从设计哲学到热路径源码
数据库·性能优化·orm
jay神34 分钟前
基于SpringBoot的宠物生命周期信息管理系统
java·数据库·spring boot·后端·web开发·宠物·管理系统
秋91 小时前
MySQL 8.0.46 与 MySQL 9.7.0在sql语句方面的区别并举例说明
数据库·sql·mysql
一只数据集1 小时前
NVIDIA Nemotron AIQ Agentic Safety Dataset:面向企业级智能体系统的安全与防护评估数据集全面解析
网络·数据库·安全
Amazinqc1 小时前
Mysql数据库数据软隔离的并发死锁情况
数据库·mysql·死锁
DianSan_ERP1 小时前
京东订单接口集成中如何处理消费者敏感信息的安全与合规问题?
前端·数据库·后端·团队开发·运维开发
原来是猿1 小时前
TCP Echo Server 深度解析:从单进程到线程池的演进之路(中)
linux·服务器·数据库
treesforest1 小时前
IP地址段查询完全指南:从单IP查到IPv4段批量归属地查询
网络·数据库·网络协议·tcp/ip·网络安全·运维开发
fTiN CAPA2 小时前
Linux系统离线部署MySQL详细教程(带每步骤图文教程)
linux·mysql·adb
渣渣灰95872 小时前
基于STM32F03ZET6移植FreeRTOS
数据库·stm32·嵌入式硬件