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

PostgreSQL GIN-indeks langsommere end GIST for pg_trgm?

Nogle problemer skiller sig ud:

Overvej først at opgradere til en aktuel version af Postgres . I skrivende stund er det pg 9.6 eller pg 10 (i øjeblikket beta). Siden Pg 9.4 har der været adskillige forbedringer til GIN-indekser, det ekstra modul pg_trgm og big data generelt.

Dernæst har du brug for meget mere RAM , især en højere work_mem indstilling. Jeg kan se fra denne linje i EXPLAIN output:

Heap Blocks: exact=7625 lossy=223807

"tab" i detaljerne for en Bitmap Heap Scan (med dine specifikke tal) indikerer en dramatisk mangel på work_mem . Postgres indsamler kun blokadresser i bitmap-indeksscanningen i stedet for rækkepegere, fordi det forventes at være hurtigere med din lave work_mem indstilling (kan ikke indeholde nøjagtige adresser i RAM). Mange flere ikke-kvalificerende rækker skal filtreres i følgende Bitmap Heap Scan denne måde. Dette relaterede svar har detaljer:

Men indstil ikke work_mem også højt uden at tage hele situationen i betragtning:

Der kan andre problemer, såsom indeks- eller tabelopsvulmning eller flere konfigurationsflaskehalse. Men hvis du retter kun disse to elementer, bør forespørgslen være meget allerede hurtigere.

Har du virkelig brug for at hente alle 40k rækker i eksemplet? Du vil sandsynligvis tilføje en lille LIMIT til forespørgslen og gør den til en "nærmeste nabo"-søgning - i så fald er et GiST-indeks trods alt det bedre valg, fordi det formodes at være hurtigere med et GiST-indeks. Eksempel:




  1. FEJL:Indlæsning af lokale data er deaktiveret - dette skal være aktiveret på både klient- og serversiden

  2. Sådan laver du automatisk inkrementfelt i django, som starter fra 10000

  3. Strengopdeling i PL/SQL

  4. Henter liste over tabelkommentarer i PostgreSQL