数据库索引为什么能加速查询

"加个索引就快了"——这句话经常听到,但索引到底是怎么做到的?这篇笔记记录我对索引原理的理解。

没有索引时会怎样

如果一张表没有任何索引,数据库要找某条记录,只能从头到尾一行一行地扫描,这就是"全表扫描"。数据量小时无所谓,一旦有几百万行,每次查询都会很慢。

索引就像目录

可以把索引想象成书的目录。要找某个章节,先翻目录定位页码,而不是从第一页开始翻。索引就是数据库为某些列额外维护的一份"有序目录"。

B+ 树

大多数关系型数据库的索引用的是 B+ 树结构。它的特点是层级很矮、每个节点能存很多键,所以即使数据量很大,从根节点找到目标也只需要很少几次磁盘读取。叶子节点之间还用链表连接,非常适合范围查询。

索引不是越多越好

索引能加速查询,但也有代价:

什么时候该建索引

可以用 EXPLAIN 查看查询的执行计划,确认是否真的用上了索引、有没有发生全表扫描。

小结

索引的本质是"用空间和写入成本,换取查询速度"。理解了 B+ 树之后,建索引这件事就从"凭感觉"变成了"有依据"。

← 返回首页