温馨提示×

温馨提示×

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

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

关系数据库为何要用索引

发布时间:2026-09-04 00:06:15 来源:亿速云 阅读:92 作者:小樊 栏目:数据库

关系数据库使用索引(Index),核心目的只有一个:加快数据的查询速度,同时尽量不显著拖慢写入和维护成本

下面从“为什么需要”“怎么起作用”“代价是什么”三个角度说明。


一、为什么关系数据库要用索引

1. 没有索引时只能“全表扫描”

关系数据库的数据通常存放在**表(heap / B+树叶子节点)**中,物理上是无序或按插入顺序存放的。

例如:

SELECT * FROM user WHERE id = 10086;

如果没有索引:

  • 数据库只能从第一行开始逐行比较
  • 数据量越大,查询越慢(O(n))

这就是全表扫描(Full Table Scan)


2. 索引提供“快速查找路径”

索引类似于:

  • 书的目录
  • 字典的拼音/部首表

它保存了:

  • 索引列的值
  • 对应数据行的物理位置(或主键)

查询时:

  • 先查索引(O(log n))
  • 再定位数据

例如 B+树索引:

id=10086
  → 索引树定位
    → 数据行位置

二、索引在关系数据库中常见的作用

1. 加速 WHERE 条件查询

WHERE age = 30
WHERE name LIKE '张%'

2. 加速 ORDER BY / GROUP BY

没有索引时:

  • 需要额外排序(filesort)
  • 成本高

有索引时:

  • 数据本身有序
  • 避免排序

3. 保证唯一性(唯一索引)

UNIQUE (email)
  • 防止重复数据
  • 同时提升查询效率

4. 支持主键和关系约束

  • 主键索引
  • 外键引用
  • JOIN 关联查询加速

5. 减少 IO 次数

  • 索引结构高度紧凑
  • 一次磁盘 IO 可比较大量 key
  • 减少随机 IO

三、索引不是“越多越好”

索引的代价

  1. 占用存储空间
  2. 降低写入性能
    • INSERT / UPDATE / DELETE 都要维护索引
  3. 可能增加优化器选择成本

四、形象类比

场景 无索引 有索引
查字典 从头翻到尾 查目录
找书 逐本翻 按分类架
数据库 全表扫描 索引定位

五、一句话总结

关系数据库使用索引,是为了在海量数据中,用更小的代价快速定位所需记录,避免低效的全表扫描。

如果你愿意,我也可以讲:

  • B+树索引原理
  • 聚簇索引 vs 非聚簇索引
  • 什么字段适合建索引
  • 索引失效的常见场景
向AI问一下细节

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

AI