什么是索引?索引对查询性能的影响?
简单来说,数据库索引就像一本书的目录。
-
你想在《红楼梦》里找“林黛玉葬花”这个情节,是愿意一页一页地翻整本书(全表扫描),还是直接查目录找到对应的页码(使用索引)?
-
索引就是这个“目录”,它是一种帮助数据库快速查找数据的数据结构。
一、索引究竟是什么?
在技术层面,索引是数据库表中一列或多列值的排序集合,以及这些值对应到表中物理存储位置的指针。
最常见的索引类型是 B-Tree(平衡树) 索引,它的结构就像一棵倒过来的树:
-
根节点:树的顶端。
-
中间节点:包含了键值的范围和指向下一层节点的指针。
-
叶子节点:树的底层,包含了索引列的实际值和指向表中对应数据行的物理地址(ROWID)。
工作流程:当你在name字段上建立了索引后,查询name = '张三'时,数据库会从根节点开始,经过几次快速比较,直接定位到叶子节点上“张三”的位置,然后根据指针找到表中对应的整行数据。这个过程可能只需要遍历3-4层树结构,效率极高。
二、索引对查询性能的戏剧性影响
1. 有索引时(“坐高铁”)
假设我们在 users 表的 name 字段上创建了索引。
sql
-- 这条查
