2008-11-12 18 views
3

PostgreSQL permet la création d''index partiels' qui sont essentiellement des index avec des prédicats conditionnels. Pendant le test, j'ai constaté qu'ils fonctionnent très bien pour un cas où la requête n'accède qu'à certaines lignes de 12 dans une table avec 120k lignes.Quels sont les avantages et les inconvénients de l'utilisation d'un «index partiel»?

Mais avant de déployer cela, y a-t-il des inconvénients ou des mises en garde que nous devrions connaître?

Répondre

4

Pro:

Cela réduit la taille de l'index, qui permettra d'accélérer les requêtes qui ne utilisent l'indice. Il permettra également d'accélérer de nombreuses opérations de mise à jour de la table, car l'indice n'a pas besoin d'être mis à jour dans tous les cas

Con:

Puisque ce n'est un indice réel, si vous faites pleinement joindre ou en filtrant sur des valeurs non couvertes par l'index, les performances se dégraderont à mesure que la taille de votre table augmentera.

6

Le principal avertissement est de ne pas les utiliser de façon inappropriée. Ils sont utiles pour identifier les lignes correspondant à un ensemble de critères dans lesquels ces lignes sont minoritaires dans une grande table.

Prenez une table Orders par exemple avec une colonne order_status et la distribution de vos données sur les statuts de commande comme suit:

  • Nouveau 5%
  • Backordered 2%
  • En transit 5%
  • Terminé 85%
  • Renvoyé 3%

Si vous interrogez très souvent where order_status = 'New' pour obtenir une liste de nouvelles commandes et que la plupart du temps il suffit de référencer les commandes directement par ID, un index partiel serait bénéfique. Dans votre exemple de 12 lignes sur 120k, c'est encore plus vrai.

+1

+1. Parfois, dans les environnements de production, des indices sont ajoutés dans le cadre de l'optimisation des performances. L'index partiel permet au DBA de syntoniser un cas spécifique tel que (order_status = 'New') sans prendre le hit complet de l'index normal. –