我将使用 BRIN 索引来替换 Postgresql-11 中日期/时间戳列上的 B 树索引。我以前从未使用过它。
因为如果数据以列被索引的顺序物理存储,那么 BRIN 索引会更有效。
我怀疑我是否应该删除所有数据,然后按顺序重新插入它们。我的数据被用于静态分析,不会改变。
我将使用 BRIN 索引来替换 Postgresql-11 中日期/时间戳列上的 B 树索引。我以前从未使用过它。
因为如果数据以列被索引的顺序物理存储,那么 BRIN 索引会更有效。
我怀疑我是否应该删除所有数据,然后按顺序重新插入它们。我的数据被用于静态分析,不会改变。
与与数据库相关的所有内容一样,答案将是“视情况而定”。
如果键值的排序遵循存储层中块的组织,则 BRIN 索引是有效的。在最简单的情况下,这可能需要表的物理顺序,这通常是其中行的创建顺序,以匹配键的顺序。生成的序列号或创建的数据上的键是 BRIN 索引的最佳候选者。
您提到索引将在日期/时间戳列中创建,因此,只要这些记录已经按顺序存储在表中,您就不需要转储和重新加载。如果值到处都是,那么以新顺序导出数据、删除表并重新加载将符合您的最佳利益。
与普通的 B-Tree 索引相比,BRIN 索引使用的存储空间要少得多,但它们可能非常“有损”,这会降低它们的有效性。您可以通过指定
pages_per_range
如下值来调整它:BRIN 索引将一系列页面的条目存储在相应的表中。页面范围越大,索引越小。指数越小,损失越大。
因为索引的创建和销毁速度比完整的表加载(时间迷雾)要快得多,所以我建议在非生产系统上玩一下,看看 BRIN 是否比 B-tree 更适合您的用例和如果您的表数据足够连续,不需要重新加载。
希望这有帮助??