sql >> Databáze >  >> RDS >> PostgreSQL

PostgreSQL GIN index pomalejší než GIST pro pg_trgm?

Některé problémy vyčnívají:

Nejprve zvažte upgrade na aktuální verzi Postgres . V době psaní tohoto článku je to str. 9.6 nebo str. 10 (aktuálně beta). Od Pg 9.4 došlo k několika vylepšením indexů GIN, dodatečného modulu pg_trgm a velkých dat obecně.

Dále potřebujete mnohem více RAM , zejména vyšší work_mem nastavení. Poznám to z tohoto řádku v EXPLAIN výstup:

Heap Blocks: exact=7625 lossy=223807

"ztrátové" v podrobnostech pro Skenování bitmapové haldy (s vašimi konkrétními čísly) označuje dramatický nedostatek work_mem . Postgres shromažďuje adresy bloků pouze při skenování indexu bitmapy namísto ukazatelů řádků, protože se očekává, že to bude rychlejší s vaším nízkým work_mem nastavení (nemůže mít přesné adresy v paměti RAM). V následujícím Skenování haldy bitmap je třeba filtrovat mnohem více nesplňujících řádků tudy. Tato související odpověď obsahuje podrobnosti:

Ale nenastavujte work_mem také vysoká bez ohledu na celou situaci:

Mohou se vyskytnout další problémy, jako je nadýmání indexu nebo tabulky nebo další úzká místa v konfiguraci. Pokud však opravíte pouze tyto dvě položky, dotaz by měl být hodně již rychleji.

Také opravdu potřebujete načíst všech 40 000 řádků v příkladu? Pravděpodobně budete chtít přidat malý LIMIT na dotaz a udělejte z něj vyhledávání „nejbližšího souseda“ – v takovém případě je nakonec index GiST lepší volbou, protože to má být rychlejší s indexem GiST. Příklad:




  1. Jak se vyhnout rekurzi ve spouštěči aktualizace, která provádí aktualizaci?

  2. Jaký je nejlepší ovladač Oracle JDBC typu 4?

  3. Strukturování jako Query v mySQL a VB.Net

  4. Rails &Postgres:Migrace na change_colomn způsobuje chybu, kterou nelze přetypovat do typu timestamp bez časového pásma