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

Index Postgres GIST vs Btree

Pokud chcete použít jakoukoli indexovou metodu jinou než běžné indexy b-stromu (nebo hash indexy, ale ve skutečnosti by se neměly používat), musíte použít GiST. Indexy PostGIS vyžadují GiST.

Indexy B-stromu lze použít pouze pro základní operace zahrnující rovnost nebo řazení, jako je = , < , <= , > , >= , <> , BETWEEN a IN . I když můžete vytvořit index b-stromu na objektu geometrie (bodu, oblasti atd.), lze jej ve skutečnosti použít pouze pro rovnost jako porovnání řazení jako > jsou pro takové objekty obecně bezvýznamné. GiST index je vyžadován pro podporu složitějších a obecnějších srovnání, jako je „obsahuje“, „protíná“ atd.

Můžete použít btree_gist rozšíření pro povolení indexování b-stromu pro GiST. Je podstatně pomalejší než běžné indexy b-stromu, ale umožňuje vám vytvořit vícesloupcový index, který obsahuje jak typy pouze GiST, tak běžné typy jako text , integer , atd.

V těchto situacích opravdu potřebujete použít explain analyze (explain.depesz.com je k tomu užitečné), abyste prozkoumali, jak Pg používá různé indexy a kombinace indexů, které vytvoříte. Vyzkoušejte různé řazení sloupců ve vícesloupcových indexech a zjistěte, zda jsou efektivnější dva nebo více samostatných indexů.

Pevně ​​se domnívám, že v tomto případě dosáhnete nejlepších výsledků s vícesloupcovým indexem GiST, ale zkusil bych několik různých kombinací indexů a řazení indexových sloupců.




  1. Mysql Nested Select

  2. Přehled replikace mezi clustery

  3. metoda table_exists() možná nefunguje správně

  4. postgresql, nemohl identifikovat sloupec v datovém typu záznamu