温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2026-09-28 02:25:25 来源:亿速云 阅读:105 作者:小樊 栏目:数据库

数据库索引能加速查询,本质上是因为它改变了数据的查找方式,把“逐条扫描”变成了“快速定位”。下面从原理到类比逐步说明。


一、没有索引时:全表扫描

假设有一张用户表 users,有 1000 万行数据:

SELECT * FROM users WHERE name = '张三';

没有索引时:

  • 数据库只能从第一行开始,一行一行地比较 name
  • 最坏情况要扫描 1000 万行
  • 时间复杂度:O(n)

这就像你在一本没有目录的书中找某个词,只能一页一页翻。


二、有索引时:像查字典一样

索引通常是 B+树(最常见) 结构:

CREATE INDEX idx_name ON users(name);

索引内部大致是这样:

root
 ├── a–f → 指针
 ├── g–m → 指针
 ├── n–s → 指针 → 张三
 └── t–z → 指针

查询过程:

  1. 从根节点开始比较
  2. 快速缩小范围
  3. 最终定位到“张三”所在的数据行

时间复杂度:O(log n)


三、为什么 B+树索引这么快?

1. 有序存储

  • 索引列是排序的
  • 可以用“二分查找”思路快速定位

2. 树高度很低

  • 1000 万数据,B+树可能只有 3~4 层
  • 每次查询只需很少次磁盘 IO

3. 减少磁盘 IO(关键)

  • 数据库瓶颈常常在 磁盘读取
  • 索引结构让“该读哪一块”非常明确
  • 避免读无用数据

四、索引里存了什么?

以 InnoDB 为例:

  • 索引中存:索引列值 + 主键值
  • 通过主键再回表拿完整数据(聚集索引除外)

五、一个直观类比

场景 方式 效率
无索引 翻完整本书 慢
有索引 查目录 → 翻到那一页 快

六、索引不是万能的

索引也会带来成本:

  • 占用存储空间
  • 降低 INSERT / UPDATE / DELETE 速度
  • 不合理索引反而拖慢查询

总结一句话

数据库索引通过有序的数据结构(如 B+树),把“线性扫描”变成“对数级定位”,从而大幅减少需要访问的数据量,尤其是磁盘 IO,进而加速查询。

如果你愿意,我也可以用画图式结构或结合 MySQL / Oracle / PostgreSQL 具体讲。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手