PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Index Postgres GIST vs Btree

Vous devez utiliser GiST si vous souhaitez utiliser une méthode d'indexation autre que les index b-tree réguliers (ou les index de hachage, mais ils ne doivent pas vraiment être utilisés). Les index PostGIS nécessitent GiST.

Les index B-tree ne peuvent être utilisés que pour les opérations de base impliquant l'égalité ou l'ordre, comme = , < , <= , > , >= , <> , BETWEEN et IN . Bien que vous puissiez créer un index b-tree sur un objet géométrique (point, région, etc.), il ne peut être utilisé que pour l'égalité en tant que comparaisons de commande comme > sont généralement sans signification pour de tels objets. Un index GiST est nécessaire pour prendre en charge des comparaisons plus complexes et générales telles que "contient", "coupe", etc.

Vous pouvez utiliser le btree_gist extension pour activer l'indexation b-tree pour GiST. C'est considérablement plus lent que les index b-tree réguliers, mais vous permet de créer un index multi-colonnes qui contient à la fois des types GiST uniquement et des types réguliers comme text , integer , etc.

Dans ces situations, vous avez vraiment besoin d'utiliser explain analyze (explain.depesz.com est utile pour cela) pour examiner comment Pg utilise divers index et combinaisons d'index que vous créez. Essayez différents ordres de colonne dans les index multi-colonnes et voyez si deux ou plusieurs index distincts sont plus efficaces.

Je soupçonne fortement que vous obtiendrez les meilleurs résultats avec l'index GiST multicolonne dans ce cas, mais j'essaierais plusieurs combinaisons différentes d'index et d'ordres de colonnes d'index pour voir.