与Postgresql中的btree索引相比,brin索引如何处理非时态数据?

问题描述 投票:1回答:1

我正在阅读以下有关带索引性能的博客文章,与时态数据的btree相比。

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

问题:

  1. 我想知道brin索引的使用仅限于时间数据,例如timestampz,还是可以用于非临时数据,例如在列user_id上定义brin索引。

  2. 何时使用b树索引与brin索引?

任何指针将不胜感激。谢谢。

postgresql indices
1个回答
0
投票

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

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

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

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

观察到排序不是完美的:值为17的行在值为16的行之前。但是它足够接近,不会干扰整个块范围内的最小值和最大值(默认为128个块)。] >

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

因此,您只能在仅插入的表上使用这些索引,在该表中插入行时,索引列的值会不断增加(或减小)(通常是时间序列),或者您可以按正确的顺序人为地重写表(数据仓库)。

© www.soinside.com 2019 - 2024. All rights reserved.