Sommige problemen vallen op:
Overweeg eerst om te upgraden naar een huidige versie van Postgres . Op het moment van schrijven is dat pg 9.6 of pg 10 (momenteel bèta). Sinds pagina 9.4 zijn er meerdere verbeteringen geweest voor GIN-indexen, de aanvullende module pg_trgm en big data in het algemeen.
Vervolgens heb je veel meer RAM nodig , in het bijzonder een hogere work_mem
instelling. Ik kan het zien aan deze regel in de EXPLAIN
uitgang:
Heap Blocks: exact=7625 lossy=223807
"lossy" in de details voor een Bitmap Heap Scan (met uw specifieke nummers) duidt op een dramatisch tekort aan work_mem
. Postgres verzamelt alleen blokadressen in de bitmapindexscan in plaats van rijaanwijzers, omdat dat naar verwachting sneller zal zijn met uw lage work_mem
instelling (kan geen exacte adressen in RAM bevatten). Veel meer niet-kwalificerende rijen moeten worden gefilterd in de volgende Bitmap Heap Scan op deze manier. Dit gerelateerde antwoord bevat details:
Maar stel work_mem
niet in ook hoog zonder rekening te houden met de hele situatie:
Er kunnen andere problemen zijn, zoals een opgeblazen index of tabel of meer configuratieknelpunten. Maar als u alleen deze twee items corrigeert, zou de vraag veel . moeten zijn al sneller.
Moet je ook echt alle 40k-rijen in het voorbeeld ophalen? U wilt waarschijnlijk een kleine LIMIT
. toevoegen naar de zoekopdracht en maak er een "nearest-neighbor"-zoekopdracht van - in dat geval is een GiST-index toch de betere keuze, omdat dat zou sneller moeten zijn met een GiST-index. Voorbeeld: