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

Index multiples vs index unique sur plusieurs colonnes dans postgresql

Quel que soit le nombre d'indices que vous avez créés sur la relation, un seul d'entre eux sera utilisé dans une certaine requête (lequel dépend de la requête, des statistiques, etc.). Donc, dans votre cas, vous n'obtiendriez pas d'avantage cumulatif en créant deux index à une seule colonne. Pour tirer le meilleur parti des performances de l'index, je suggérerais d'utiliser l'index composite sur (emplacement, horodatage).

Notez que des requêtes comme ... WHERE timestamp BETWEEN smth AND smth n'utilisera pas l'index ci-dessus lors de requêtes telles que ... WHERE location = 'smth' ou ... WHERE location = 'smth' AND timestamp BETWEEN smth AND smth sera. C'est parce que le premier attribut de l'index est crucial pour la recherche et le tri.

N'oubliez pas d'effectuer

ANALYZE;

après la création de l'index afin de collecter des statistiques.

Mise à jour : En tant que @MondKin mentionné dans les commentaires certaines requêtes peuvent en fait utiliser plusieurs index sur la même relation. Par exemple, requête avec OR des clauses comme a = 123 OR b = 456 (en supposant qu'il existe des index pour les deux colonnes). Dans ce cas, postgres effectuerait des analyses d'index bitmap pour les deux index, construirait une union des bitmaps résultants et l'utiliserait pour l'analyse du tas bitmap. Dans certaines conditions, le même schéma peut être utilisé pour AND requêtes mais au lieu d'union il y aurait une intersection.