Как работает индекс brin для временных данных по сравнению с индексом btree в postgresql? - PullRequest
1 голос
/ 26 марта 2020

Я просматривал следующий пост в блоге о повышении производительности индекса по сравнению с btree по временным данным.

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

Вопросы:

  1. Мне было интересно, что использование индекса brin ограничено временными данными, такими как timestampz, или его можно использовать для невременных данных, таких как определение индекса brin для столбца, скажем, user_id.

  2. Когда использовать индекс b-дерева против индекса Брина?

Любые указатели будут высоко оценены. Спасибо.

1 Ответ

2 голосов
/ 26 марта 2020

Вы можете использовать индекс BRIN для любого типа данных, который поддерживает индекс B-дерева, то есть тип данных с общим порядком (можно сравнивать любые два значения).

Но вы можете почти никогда использует индекс BRIN. Они работают только в том случае, если физический порядок строк в таблице либо идентичен, либо в точности противоположен логическому порядку значений столбцов, которые вы индексируете.

Таким образом, при использовании целых чисел следующая таблица будет в порядке:

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

Обратите внимание, что порядок не идеален: строка со значением 17 находится перед строкой со значением 16. Но это достаточно близко, чтобы не нарушать минимальное и максимальное значение в диапазоне блоков (128 блоки по умолчанию).

Однако, если в диапазоне блоков имеется только одно значение выброса, индекс BRIN станет бесполезным.

Таким образом, эти индексы можно использовать только в таблицах только для вставки. где строки вставляются с постоянно увеличивающимися (или убывающими) значениями для индексированного столбца (типично для временных рядов) или если вы можете искусственно переписать таблицу в правильном порядке (хранилище данных).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...