索引概念和索引底层数据结构

什么是索引

索引(index) 是帮助 MySQL 高效获取数据的有序数据结构。

在数据之外,数据库系统还维护着满足特定查找算法的数据结构(InnoDB 中为 B+ 树),这些数据结构以某种方式引用(指向)数据。这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。

核心作用:把无序数据变成有序结构,将查找从 O(n) 全表扫描降为 O(log n) 树查找。

索引底层数据结构

B+ 树用"非叶子只存指针 + 叶子存数据 + 叶子连成双向链表"的设计,换来了更矮的树、更少的 I/O、更方便的区间查询------这正是 InnoDB 选它做索引结构的原因。

  • 阶数更多,路径更短:非叶子节点不存数据,只存 key 和指针,同样磁盘页能容纳更多 key,所以阶数更高、树更矮,查找路径更短。

  • 磁盘读写代价更低:相比 B 树,非叶子节点只存储指针,叶子节点才存储数据(聚簇索引存整行,二级索引存主键),单次 I/O 能读入更多索引项。

  • 便于区间查询和排序 :叶子节点之间用双向链表相连,范围查询只需顺着链表扫描,无需回溯上层节点。

相关推荐
All for pursuit.1 小时前
【完结】LeetCodeHot100题 详细解题过程及代码汇总
数据结构·c++·算法·leetcode
mmmmath_31 小时前
LeetCode.101.对称二叉树
数据结构·leetcode
Logic1012 小时前
C语言/数据结构位运算题解:异或XOR找出数轴移动中只出现一次的指令——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
重生之小比特2 小时前
【算法拾光】双指针|移动零 + 复写零
数据结构·c++·算法
动词ing4 小时前
[题目练习】三数之和
数据结构
YSL0701245 小时前
一文通关-----栈和队列
开发语言·数据结构
垆边人似月.5 小时前
找出最小的 K 个数
数据结构·c++·算法
Logic1016 小时前
C语言/数据结构贡献法题解:数组权值——所有连续子数组中不同数字个数之和(O(n)解法)
c语言·数据结构·算法·数组·时间复杂度·贡献法·哈希记录
从小白到软工7 小时前
4-1 指针
c语言·开发语言·数据结构·经验分享·ai编程