《系统设计》课程学习笔记—索引

102 阅读2分钟

谈到数据库就离不开索引,它们用于提高数据存储中数据检索操作的速度。索引在增加存储开销和较慢写入(因为我们不仅必须写入数据,还必须更新索引)之间进行权衡,以获得快速读取的好处。索引用于快速定位数据,而不必检查数据库表中的每一行。索引可以使用数据库表的一列或多列创建,为快速随机查找和高效访问有序记录提供了基础。

indexes.png

索引是一种可以被视为一个目录,将我们指向实际数据所在的位置的数据结构。因此,当我们在表的列上创建索引时,我们存储该列和指向索引中整行的指针。索引还用于创建相同数据的不同视图。对于大型数据集,这是一种很好的方法,可以指定不同的过滤器或排序方案,而无需创建数据的多个额外副本。

数据库索引的一个特点是它们可以是**密集(dense)的,也可以是稀疏(sparse)**的。不同的索引有自身的权衡。让我们看看每种索引类型如何工作:

密集索引

在密集索引中,为表的每一行创建索引记录。可以直接定位记录,因为索引的每个记录都包含搜索键值和指向实际记录的指针。

dense-index.png

在写入时,密集索引比稀疏索引需要更多的维护。由于每一行都必须有一个条目,数据库必须在插入、更新和删除时维护索引。每行都有一个条目也意味着密集索引将需要更多内存。密集索引的好处是,只需进行二分搜索即可快速找到值。密集索引也不会对数据施加任何排序要求。

稀疏索引

在稀疏索引中,仅为部分记录创建记录。

sparse-index.png

稀疏索引在写入时相比密集索引需要更少的维护,因为它们只包含值的子集。这种较轻的维护负担意味着插入、更新和删除将更快。条目较少也意味着索引将使用较少的内存。查找数据速度较慢,因为页面上的扫描通常遵循二分搜索。使用有序数据时,稀疏索引也是可选的。