sql >> Database teknologi >  >> RDS >> PostgreSQL

Flerkolonneindeks på 3 felter med heterogene datatyper

Enkeltkolonneindeks

Postgres kan kombinere flere indekser meget effektivt i en enkelt forespørgsel med bitmap-indeksscanninger . Det meste af tiden vælges det mest selektive indeks (eller to, kombineret med bitmap-indeksscanninger), og resten filtreres. Når først resultatsættet er smalt nok, er det ikke effektivt at scanne flere indekser.

Flerkolonneindeks

Det er stadig hurtigere at have et perfekt matchende indeks med flere kolonner, men ikke efter størrelsesordener.
Da du vil inkludere en arraytype Jeg foreslår at bruge en GIN indeks. AFAIK, operatørklasser mangler for generelle GiST-indekser på array-type. (Undtagelsen er intarray for integer arrays.)

At inkludere integer kolonne, skal du først installere det ekstra modul btree_gin , som giver de nødvendige GIN-operatørklasser. Kør én gang pr. database :

CREATE EXTENSION btree_gin;

Så skulle du være i stand til at oprette dit multikolonneindeks:

CREATE INDEX tbl_abc_gin_idx ON tbl USING GIN(a, b, c);

Rækkefølgen af ​​indekskolonner er irrelevant for GIN-indekser. Manualen:

Et multikolonne GIN-indeks kan bruges med forespørgselsbetingelser, der involverer et hvilket som helst undersæt af indeksets kolonner. I modsætning til B-tree eller GiST er indekssøgeeffektiviteten den samme, uanset hvilke indekskolonne(r) forespørgselsbetingelserne bruger.

Søg efter nærmeste nabo

Da du inkluderer en PostGis geometry type, sandsynligvis vil du lave en nærmeste nabosøgning, som du skal bruge en GiST til indeks. I dette tilfælde foreslår jeg to indekser:

CREATE INDEX tbl_ac_gist_idx ON tbl USING GiST(a, c);  -- geometry type
CREATE INDEX tbl_bc_gin_idx  ON tbl USING GIN(b, c);

Du kan tilføje integer kolonne c til den ene eller begge. Det afhænger af. Til det skal du enten bruge btree_gin eller btree_gist eller begge dele.



  1. Azure Automation Methods

  2. SQL Server-klynger fra et Oracle RAC-perspektiv

  3. Skal jeg designe en tabel med en primærnøgle af varchar eller int?

  4. Tilslutning til en tabel baseret på kommaseparerede værdier