什么是索引
索引(index) 是帮助 MySQL 高效获取数据的有序数据结构。
在数据之外,数据库系统还维护着满足特定查找算法的数据结构(InnoDB 中为 B+ 树),这些数据结构以某种方式引用(指向)数据。这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。
核心作用:把无序数据变成有序结构,将查找从 O(n) 全表扫描降为 O(log n) 树查找。
索引底层数据结构
B+ 树用"非叶子只存指针 + 叶子存数据 + 叶子连成双向链表"的设计,换来了更矮的树、更少的 I/O、更方便的区间查询------这正是 InnoDB 选它做索引结构的原因。
-
阶数更多,路径更短:非叶子节点不存数据,只存 key 和指针,同样磁盘页能容纳更多 key,所以阶数更高、树更矮,查找路径更短。
-
磁盘读写代价更低:相比 B 树,非叶子节点只存储指针,叶子节点才存储数据(聚簇索引存整行,二级索引存主键),单次 I/O 能读入更多索引项。
-
便于区间查询和排序 :叶子节点之间用双向链表相连,范围查询只需顺着链表扫描,无需回溯上层节点。
