一张表几百万行,你按条件查一条却秒回。靠的就是索引(Index)。

一、索引 = 字典的目录

没有目录的字典,你查“张”字得从头翻到尾(这叫全表扫描)。有了目录,先看拼音表定位页码,直接翻过去——索引干的就是“建目录”。

索引像字典目录

数据库索引最常用的结构是 B+ 树:它像一棵矮胖的树,所有数据都排在最底层的叶子上,并且叶子之间用链表串起来。

二、为什么用 B+ 树,而不是普通二叉树

  • 普通二叉树(尤其退化成链)可能很高,查一次要很多层磁盘 IO。
  • B+ 树一个节点能放很多关键字,树很矮(通常 3~4 层),查任意数据都只要几次 IO,稳定又快。
  • 叶子全连起来,做“范围查询”(查 10~20 号)不用回树顶,顺着链表扫就行。

B+ 树:矮胖,叶子串成链

三、索引不是越多越好

  • 占空间:索引也是数据,要存。
  • 拖慢写入:每次插入/更新/删除,索引也得跟着改。
  • 所以只在常用来查、区分度高的列上加索引;乱加反而更慢。

四、一句口诀

常用查询的列加索引;最左前缀原则(联合索引 abc,能用到 a、ab、abc,但跳着用不到);别在区分度低的列(比如“性别”)上浪费索引。

一句话:索引就是给数据建目录,靠 B+ 树把“翻全书”变成“查目录再翻一页”,又快又稳,但维护有代价,别滥用。