Moz*_*zhi 4 postgresql indices
我正在阅读以下博客文章,介绍与时态数据上的 BTree 进行比较时的索引性能。
https://info.crunchydata.com/blog/postgresql-brin-indexes-big-data-performance-with-minimal-storage
我想知道 brin 索引的使用仅限于像 timestampz 这样的时态数据,或者它是否可以用于非时态数据,比如在列上定义 brin 索引,比如说 user_id 。
何时使用 B 树索引与 brin 索引?
任何指示将不胜感激。谢谢。
您可以将 BRIN 索引用于任何支持 B 树索引的数据类型,即具有全排序的数据类型(可以比较任意两个值)。
但您几乎永远无法使用 BRIN 索引。仅当表中行的物理顺序与您正在索引的列值的逻辑顺序相同或完全相反时,它们才起作用。
因此,使用整数,下表就可以了:
+--------------+----------------+------
|1 4 6 7 12 14 | 17 16 29 31 44 | ...
+--------------+----------------+------
8kB block 8kB block
Run Code Online (Sandbox Code Playgroud)
请注意,排序并不完美:值为 17 的行位于值为 16 的行之前。但它足够接近,不会干扰块范围(默认情况下为 128 个块)上的最小值和最大值。
但是,如果每个块范围只有一个异常值,则 BRIN 索引将变得毫无用处。
因此,您只能在仅插入表上使用这些索引,其中插入的行的索引列值不断增加(或减少)(典型的时间序列),或者您可以按照正确的顺序人为地重写表(a数据仓库)。
| 归档时间: |
|
| 查看次数: |
375 次 |
| 最近记录: |