sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL GIN-index langzamer dan GIST voor pg_trgm?

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:




  1. Meerdere verbindingen met dezelfde verbindingsreeks onder één transactie, verhoogde transactie?

  2. Records in de juiste volgorde retourneren in PostgreSQL

  3. Hoe gebruik je Regexp in MySQL Vervang commando's?

  4. Ik heb de blanco waarde uit de database in laravel bij select