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

Rozdíl mezi GiST a GIN indexem

Nemyslím si, že bych to mohl vysvětlit lépe, než už to dělá příručka:

Při výběru typu indexu, který chcete použít, GiST nebo GIN, zvažte tyto rozdíly ve výkonu:

  • Vyhledávání indexů GIN je asi třikrát rychlejší než GiST

  • Vytváření indexů GIN trvá asi třikrát déle než GiST

  • Indexy GIN se aktualizují mírně pomaleji než indexy GiST, ale asi 10krát pomaleji, pokud byla zakázána podpora rychlých aktualizací [...]

  • Indexy GIN jsou dvakrát až třikrát větší než indexy GiST

Odkaz a citace naleznete v příručce pro Postgres 9.4. Odhady velikosti a výkonu se již zdály mírně zastaralé. S Postgres 9.4 se šance podstatně posunuly ve prospěch GIN .
Poznámky k vydání Postgres 9.4 zahrnují:

  • Snížit velikost indexu GIN (Alexander Korotkov, Heikki Linnakangas) [...]

  • Zlepšení rychlosti víceklíčového vyhledávání GIN (Alexander Korotkov, HeikkiLinnakangas)

Odhady velikosti a výkonu byly mezitím z manuálu odstraněny.

Všimněte si, že existují speciální případy použití, které vyžadují jedno nebo druhé.

Jednu věc jste špatně pochopili:nikdy získat špatné výsledky pomocí indexu GiST. Index pracuje s hodnotami hash, což může vést k falešně pozitivním výsledkům v indexu. To by mělo být relevantní pouze u velkého počtu různých slov ve vašich dokumentech. Falešné poplachy jsou v každém případě eliminovány po opětovné kontrole skutečného řádku. Manuál:

Index GiST je ztrátový, což znamená, že index může produkovat falešné shody a je nutné zkontrolovat skutečný řádek tabulky, aby se takové falešné shody eliminovaly. (PostgreSQL to dělá automaticky, když je potřeba. )

Tučné zdůraznění moje.




  1. Přehled replikace na úrovni svazku pro PostgreSQL pomocí DRBD

  2. Najděte záznamy z jedné tabulky, které v jiné neexistují

  3. CREATE TABLE MySQL vs T-SQL s příklady syntaxe

  4. Klauzule OUTPUT v MySQL