BRIN ( Block Range In dex ) er en dataindekseringsteknik designet til at behandle store [1] tabeller, hvor værdien af den indekserede kolonne har en naturlig sammenhæng med den fysiske position af rækken i tabellen . De har sådanne egenskaber af partitionerede tabeller som hurtig rækkeindsættelse, hurtig indeksoprettelse uden behov for eksplicit at erklære partitioner. [2]
Kan bruges til geografiske data [3] , tidsserier [4] , logfiler eller butiksordrehistorik, som skrives sekventielt, og derfor er nogle kolonner (dato, klokkeslæt, nummer) allerede delvist ordnet på det fysiske niveau, og på samme tidtabeller med sådanne data vokser normalt til gigantiske størrelser. Fremskynder sammenligningsoperatører, men påvirker ikke lignende-forespørgsler. [5] . BRIN er ikke et unikt indeks [6] og kan derfor ikke bruges som et primært nøgleindeks. [7]
BRIN-indekser blev først foreslået af Alvaro Herrera fra 2ndQuadrant i 2013 under navnet "Minmax-indekser". Support er blevet annonceret i PostgreSQL siden version 9.5 [8] . Andre DBMS'er har lignende muligheder, inklusive Oracle [9] [10] , Netezza ("zonekort"), en:Infobright ("datapakker"), en:MonetDBand , Apache Hive med ORC/Parquet.
BRIN opererer med beskrivelser af store datablokke, hvor minimums- og maksimumværdierne for den indekserede kolonne i blokken gemmes. Under anmodninger filtreres blokke først (forespørgselsbetingelserne anvendes på blokbeskrivelsen). For et lille antal kontroller reduceres det datasæt, der skal kontrolleres linje for linje. [elleve]
PostgreSQL DBMS gemmer data i "sider", hver tabel eller indeks er en sekvens af sider. Standardsidestørrelsen er 8 kilobyte. [12] En blok eller et blokområde er en gruppe sider (ikke rækker), der følger efter hinanden i en tabel. Blokken er i dette tilfælde en del af indekset, ikke tabellen: dens størrelse kan bestemmes på det tidspunkt, hvor indekset oprettes med parameteren pages_per_range. [13]
Efterhånden som siderne er fyldt med data, opdateres blokoplysningerne. Ikke hver side svarer til en blok, nyligt oprettede sider har muligvis ikke en blok (oprettelse af nye blokke i indekset sker f.eks. under en operation VACUUMpå en tabel).
BRIN er så kompakt, at den kan passe helt i RAM, hvilket reducerer antallet af diskoperationer under en forespørgsel. Dette er ikke altid sandt for B-træindekser, som har brug for en træknude for cirka hver N tabelrække, hvor N er kapaciteten af en knude. Størrelsen af et B-træindeks er betydelig og kan sammenlignes med mængden af data i den indekserede tabelkolonne.