什么是数据库索引?

更新于 2026-01-06

Codecademy

什么是索引?

索引是数据库后台使用的一种强大工具,用于加速查询操作。它通过提供一种快速查找所需数据的方法,为查询提供支持。

简单来说,索引是指向表中数据的指针。数据库中的索引与书籍末尾的索引非常相似。

为什么需要索引?

想象一下,你走进美国国会图书馆(Library of Congress),被要求在10分钟内找到一本特定的出版物。你能在这个时限内完成任务吗?国会图书馆被认为是世界上最大的图书馆,馆藏约1.7亿件物品。虽然国会图书馆并非普通公众可以随意借阅书籍的场所,但如果你和我们一样,就会知道这个挑战其实并不难——因为我们会做的第一件事就是请求使用图书馆的索引系统。索引包含了快速高效地访问馆藏所需的所有信息。

同样地,数据库索引也包含快速高效访问数据所需的关键信息。在当今社会,数据业务正在飞速发展。事实上,一些科技巨头每天要处理数百拍字节(petabytes,1 PB = 10¹⁵ 字节)的数据。将这些数据存储在数据库中固然重要,但对于数据公司而言,能否高效地访问这些数据才是成功的关键。正如国会图书馆的例子所示,解决海量数据访问效率问题的一种方法,就是使用索引。索引充当了高效的查找表,使数据检索更加快速

索引是如何创建的?

在数据库中,数据以行的形式存储,并组织成表。每一行都有一个唯一键(key),用于将其与其他所有行区分开来,而这些键会被存储在索引中,以便快速检索。

由于键被存储在索引中,因此每当添加一个带有新唯一键的行时,索引会自动更新。然而,有时我们需要快速查找并非作为主键存储的数据。例如,我们可能需要根据电话号码快速查找客户。在这种情况下,使用唯一约束(unique constraint)并不合适,因为多个客户可能拥有相同的电话号码。此时,我们可以手动创建自己的索引

创建索引的语法因数据库系统而异,但通常包括以下结构:

CREATE INDEX <索引名称>
ON <表名> (列1, 列2, ...)

例如,如果我们希望对 customers 表中的电话号码建立索引,可以使用以下语句:

CREATE INDEX customers_by_phone
ON customers (phone_number)

需要注意的是:用户无法直接看到索引,它们仅用于加速搜索和查询操作

注意:对带有索引的表进行更新操作,比没有索引的表耗时更长(因为索引本身也需要同步更新)。因此,应仅在那些会被频繁用于搜索条件的列上创建索引

总结

本文旨在为你提供关于数据库索引的概述,包括以下要点:

  • 索引是数据库后台用于加速查询的强大工具。
  • 索引包含快速高效访问数据所需的关键信息。
  • 索引充当查找表,以更高效地存储数据并实现快速检索。
  • 表的主键(或唯一键)会自动存储在索引中。
  • 可通过 CREATE INDEX 语句为非键列创建自定义索引。

祝你索引愉快!