sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL GIN-index långsammare än GIST för pg_trgm?

Vissa problem sticker ut:

Överväg först att uppgradera till en aktuell version av Postgres . I skrivande stund är det sid 9.6 eller sid 10 (för närvarande beta). Sedan sidan 9.4 har det skett flera förbättringar för GIN-index, tilläggsmodulen pg_trgm och big data i allmänhet.

Därefter behöver du mycket mer RAM , särskilt en högre work_mem miljö. Jag kan se på den här raden i EXPLAIN utdata:

Heap Blocks: exact=7625 lossy=223807

"förlustig" i detaljerna för en Bitmap Heap Scan (med dina specifika nummer) indikerar en dramatisk brist på work_mem . Postgres samlar bara in blockadresser i bitmappsindexsökningen istället för radpekare eftersom det förväntas gå snabbare med din låga work_mem inställning (kan inte hålla exakta adresser i RAM). Många fler icke-kvalificerande rader måste filtreras i följande Bitmap Heap Scan den här vägen. Det här relaterade svaret har detaljer:

Men ställ inte in work_mem också hög utan att ta hänsyn till hela situationen:

Det kan finnas andra problem, som index- eller tabelluppsvällning eller fler konfigurationsflaskhalsar. Men om du åtgärdar bara dessa två objekt bör frågan vara mycket redan snabbare.

Dessutom, behöver du verkligen hämta alla 40k rader i exemplet? Du vill förmodligen lägga till en liten LIMIT till frågan och gör den till en "närmaste granne"-sökning - i så fall är ett GiST-index trots allt det bättre valet, eftersom det antas vara snabbare med ett GiST-index. Exempel:




  1. Hur man använder BETWEEN-villkoret med hjälp av huvudfrågan och underfrågor

  2. Hur man ändrar standarddatabaspostprofilen för en användare i SQL Server (T-SQL)

  3. SQL-fråga för att sortera och uppnå Unique Count

  4. Uppdatera en orderkolumn MySQL?