sql >> Database >  >> RDS >> PostgreSQL

Meerkolomsindex op 3 velden met heterogene gegevenstypen

Enkelkolomsindex

Postgres kan meerdere indexen zeer efficiënt combineren in een enkele zoekopdracht met bitmapindexscans . Meestal wordt de meest selectieve index gekozen (of twee, gecombineerd met bitmapindexscans) en wordt de rest gefilterd. Zodra de resultatenset smal genoeg is, is het niet efficiënt om meer indexen te scannen.

Index met meerdere kolommen

Het is nog steeds sneller om een ​​perfect overeenkomende index met meerdere kolommen te hebben, maar niet in ordes van grootte.
Omdat u een arraytype wilt opnemen Ik raad aan om een ​​GIN . te gebruiken inhoudsopgave. AFAIK, operatorklassen ontbreken voor GiST-indexen voor algemene doeleinden op arraytype. (De uitzondering is intarray voor integer arrays.)

Om het integer op te nemen kolom, installeer dan eerst de extra module btree_gin , die de nodige GIN-operatorklassen biedt. Voer eenmaal per database uit :

CREATE EXTENSION btree_gin;

Dan zou u uw index met meerdere kolommen moeten kunnen maken:

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

De volgorde van indexkolommen is niet relevant voor GIN-indexen. De handleiding:

Een GIN-index met meerdere kolommen kan worden gebruikt met queryvoorwaarden die betrekking hebben op een subset van de kolommen van de index. In tegenstelling tot B-tree of GiST is de zoekeffectiviteit van de index hetzelfde, ongeacht welke indexkolom(men) de zoekvoorwaarden gebruiken.

Zoeken met dichtstbijzijnde buren

Aangezien u een PostGis geometry type, is de kans groot dat je een naaste buur zoekt, waarvoor je een GiST . nodig hebt inhoudsopgave. In dit geval stel ik twee voor indexen:

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);

Je zou de integer . kunnen toevoegen kolom c naar een of beide. Dat hangt ervan af. Daarvoor heb je btree_gin . nodig of btree_gist of beide, respectievelijk.



  1. Beslis tussen controle op basis van agenten of controle zonder agenten

  2. Architectuur en afstemming van geheugen in PostgreSQL-databases

  3. Splitfunctie in orakel naar door komma's gescheiden waarden met automatische volgorde

  4. Keer in Oracle dit pad z/y/x om naar x/y/z