与postgresql中的btree索引相比,brin索引在非时态数据上的表现如何



我正在阅读以下关于在时间数据上与btree进行比较时引入索引性能的博客文章。

https://info.crunchydata.com/blog/postgresql-brin-indexes-big-data-performance-with-minimal-storage

问题:

  1. 我想知道布林索引的使用仅限于时间戳之类的时间数据,或者它是否可以用于非时间数据,比如在列上定义布林索引,比如user_id。

  2. 什么时候使用b-tree索引和brin索引?

任何指针都将不胜感激。非常感谢。

您可以对任何支持B-树索引的数据类型使用BRIN索引,即具有总排序的数据类型(可以比较任何两个值(。

但是您可以几乎从不使用BRIN索引。只有当表中行的物理顺序与要索引的列值的逻辑顺序相同或完全相反时,它们才起作用。

因此,使用整数,下表可以:

+--------------+----------------+------
|1 4 6 7 12 14 | 17 16 29 31 44 | ...
+--------------+----------------+------
8kB block       8kB block

注意,排序并不完美:值为17的行在值为16的行之前。但它足够接近,不会干扰块范围内的最小值和最大值(默认为128个块(。

然而,如果每个块范围只有一个异常值,则BRIN索引将变得无用。

因此,您只能在插入仅限插入的表上使用这些索引,其中插入的行的索引列的值不断增加(或减少((对于时间序列来说是典型的(,或者您可以按正确的顺序人工重写表(数据仓库(。

最新更新