27 votes

PostgreSQL: GIN ou les index GiST?

À partir des informations que j'ai pu trouver, ils ont à la fois résoudre les mêmes problèmes - plus ésotérique des opérations comme la matrice de confinement et l'intersection (&&, @>, <@, etc.). Cependant, je serais intéressé par des conseils sur l'utilisation de l'un ou l'autre (ou l'autre peut-être).
La documentation PostgreSQL a quelques informations à ce sujet:

  • GIN de la recherche d'index sont environ trois fois plus rapide que les GiST
  • GIN indices de prendre environ trois fois plus de temps à construire que les GiST
  • GIN indices sont environ dix fois plus lent à mettre à jour que les GiST
  • GIN indices sont deux à trois fois plus grande que GiST

Cependant, je serais particulièrement intéressé de savoir si il y a un impact sur les performances lorsque la mémoire de la taille de l'index de la ration commence à faire des petits (ie. la taille de l'index devient beaucoup plus grand que la mémoire disponible)? J'ai été dit sur le #postgresql canal IRC GIN doit conserver tous les index en mémoire, sinon il ne sera pas efficace, parce que, contrairement à B-Arbre, il ne sait pas quel partie pour lire à partir du disque pour une requête particulière? La question serait: est-ce vrai (parce que j'ai aussi été dit à l'opposé de celle-ci)? Ne GiST ont les mêmes restrictions? Existe-il d'autres restrictions que je devrais être au courant de tout, à l'aide de l'un de ces algorithmes d'indexation?

12voto

Andrea Bertani Points 836

Tout d'abord, vous avez besoin de les utiliser pour la recherche de texte l'indexation? GIN et les GiST sont des index spécialisés pour certains types de données. Si vous avez besoin de l'indice simple de char ou de valeurs entières puis la normale index B-Tree est le meilleur.
De toute façon, documentation PostgreSQL a un chapitre sur les GIST et un sur GIN, où vous pouvez trouver plus d'info.
Et, dernier mais non le moins, la meilleure façon de trouver qui est le mieux est de générer des données de l'échantillon (autant que vous avez besoin pour être un véritable scénario), puis de créer un index GIST, la mesure de la façon dont beaucoup de temps est nécessaire pour créer l'index, l'insertion d'une nouvelle valeur, à exécuter un exemple de requête. Puis supprimer l'index et faire de même avec un index GIN. Comparer les valeurs et vous aurez la réponse dont vous avez besoin, en fonction de vos données.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X