并不是,数据库为特定用例提供其他类型的索引也蛮多的。
从 Django 1.11 开始,有一个新的 Meta 选项用于在模型上创建索引。这给了我们探索其他类型索引的机会。...顾名思义,BRIN 索引会在表格中的一系列相邻块上创建一个小型索引。该索引非常小,只能说明某个值是否在范围内,或者是否在索引块范围内。
我们来做一个 BRIN 索引如何帮助我们的简单例子。...假设我们在一列中有这些值,每一个都是一个块:
1, 2, 3, 4, 5, 6, 7, 8, 9
我们为每三个相邻的块创建一个范围:
[1,2,3], [4,5,6], [7,8,9]
对于每个范围,我们将保存范围内的最小值和最大值...回到文档:
...列与表格内的物理位置有一些自然的相关性
这是 BRIN 索引的关键。为了充分利用它,列中的值必须大致排序或聚集在磁盘上。...,我创建了一个约 2M 行的表,并在磁盘上自然排序了日期字段:
B-Tree 索引:37 MB
BRIN 索引:49 KB
没错,你没看错。