BRIN ( Block Range In dex ) je technika indexování dat navržená pro zpracování velkých [1] tabulek , ve kterých má hodnota indexovaného sloupce určitou přirozenou korelaci s fyzickou pozicí řádku v tabulce . Mají takové kvality dělených tabulek, jako je rychlé vkládání řádků, rychlé vytváření indexů, bez nutnosti explicitně deklarovat oddíly. [2]
Lze použít pro geografická data [3] , časové řady [4] , protokoly nebo historii objednávek obchodu, které se zapisují sekvenčně, a proto jsou některé sloupce (datum, čas, číslo) již částečně řazeny na fyzické úrovni a na stejné časové tabulky s takovými údaji obvykle narostou do gigantických rozměrů. Zrychluje operátory porovnání, ale neovlivňuje podobné dotazy. [5] . BRIN není jedinečný index [6] , a proto jej nelze použít jako index primárního klíče. [7]
Indexy BRIN poprvé navrhl Alvaro Herrera z 2. kvadrantu v roce 2013 pod názvem „Minmax indexy“. Podpora byla oznámena v PostgreSQL od verze 9.5 [8] . Jiné DBMS mají podobné schopnosti, včetně Oracle [9] [10] , Netezza ("mapy zón"), en:Infobright ("datové balíčky"), en:MonetDBand , Apache Hive s ORC/Parquet.
BRIN pracuje s popisy velkých datových bloků, kde jsou uloženy minimální a maximální hodnoty indexovaného sloupce v rámci bloku. Během požadavků jsou bloky nejprve filtrovány (podmínky dotazu jsou aplikovány na popis bloku). Pro malý počet kontrol se tedy zmenšuje datová sada, která bude muset být kontrolována řádek po řádku. [jedenáct]
PostgreSQL DBMS ukládá data do "stránek", každá tabulka nebo index je sekvence stránek. Standardní velikost stránky je 8 kilobajtů. [12] Blok nebo rozsah bloků je skupina stránek (nikoli řádků), které následují za sebou v tabulce. Blok je v tomto případě součástí indexu, nikoli tabulky: jeho velikost lze určit v okamžiku vytvoření indexu pomocí parametru pages_per_range. [13]
Jakmile se stránky zaplní daty, informace o bloku se aktualizují. Ne každá stránka odpovídá bloku, nedávno vytvořené stránky nemusí mít blok (k vytváření nových bloků v indexu dochází např. při operaci VACUUMna tabulce).
BRIN je tak kompaktní, že se celý vejde do paměti RAM, což snižuje počet diskových operací během dotazu. To neplatí vždy pro indexy B-stromu, které potřebují uzel stromu pro přibližně každých N řádků tabulky, kde N je kapacita jednoho uzlu. Velikost indexu B-stromu je významná a může být srovnatelná s množstvím dat ve sloupci indexované tabulky.