一张图看懂「数据库索引」:为什么查数据这么快
一张表几百万行,你按条件查一条却秒回。靠的就是索引(Index)。
一、索引 = 字典的目录
没有目录的字典,你查“张”字得从头翻到尾(这叫全表扫描)。有了目录,先看拼音表定位页码,直接翻过去——索引干的就是“建目录”。
数据库索引最常用的结构是 B+ 树:它像一棵矮胖的树,所有数据都排在最底层的叶子上,并且叶子之间用链表串起来。
二、为什么用 B+ 树,而不是普通二叉树
- 普通二叉树(尤其退化成链)可能很高,查一次要很多层磁盘 IO。
- B+ 树一个节点能放很多关键字,树很矮(通常 3~4 层),查任意数据都只要几次 IO,稳定又快。
- 叶子全连起来,做“范围查询”(查 10~20 号)不用回树顶,顺着链表扫就行。
三、索引不是越多越好
- 占空间:索引也是数据,要存。
- 拖慢写入:每次插入/更新/删除,索引也得跟着改。
- 所以只在常用来查、区分度高的列上加索引;乱加反而更慢。
四、一句口诀
常用查询的列加索引;最左前缀原则(联合索引 abc,能用到 a、ab、abc,但跳着用不到);别在区分度低的列(比如“性别”)上浪费索引。
一句话:索引就是给数据建目录,靠 B+ 树把“翻全书”变成“查目录再翻一页”,又快又稳,但维护有代价,别滥用。