Question

D'après les informations que j'ai pu trouver, ils résolvent tous les deux les mêmes problèmes - des opérations plus ésotériques comme le confinement et l'intersection de tableaux (&&, @>, <@, etc.).Cependant, je serais intéressé par des conseils sur le moment d'utiliser l'un ou l'autre (ou ni l'un ni l'autre).
Le Documentation PostgreSQL a quelques informations à ce sujet:

  • Les recherches dans l'index GIN sont environ trois fois plus rapides que GiST
  • La création des index GIN prend environ trois fois plus de temps que celle de GiST
  • Les index GIN sont environ dix fois plus lents à mettre à jour que GiST
  • Les index GIN sont deux à trois fois plus grands que GiST

Cependant, je serais particulièrement intéressé de savoir s'il y a un impact sur les performances lorsque le rapport mémoire/taille d'index commence à devenir petit (c.-à-d.la taille de l'index devient beaucoup plus grande que la mémoire disponible) ?On m'a dit sur le canal IRC #postgresql que GIN devait conserver tout l'index en mémoire, sinon cela ne serait pas efficace, car, contrairement à B-Tree, il ne sait pas quelle partie lire à partir du disque. une requête particulière ?La question serait :est-ce vrai (parce qu'on m'a aussi dit le contraire) ?GiST a-t-il les mêmes restrictions ?Existe-t-il d'autres restrictions dont je dois être conscient lors de l'utilisation de l'un de ces algorithmes d'indexation ?

Était-ce utile?

La solution

Tout d’abord, devez-vous les utiliser pour l’indexation de la recherche de texte ?GIN et GiST sont des index spécialisés pour certains types de données.Si vous avez besoin d'indexer des valeurs de caractères simples ou entières, l'index B-Tree normal est le meilleur.
Quoi qu'il en soit, la documentation PostgreSQL contient un chapitre sur ESSENTIEL et un sur GIN, où vous pouvez trouver plus d'informations.
Et, enfin et surtout, la meilleure façon de trouver laquelle est la meilleure est de générer des exemples de données (autant que vous en avez besoin pour être un scénario réel), puis de créer un index GIST, en mesurant le temps nécessaire pour créer l'index. insérez une nouvelle valeur, exécutez un exemple de requête.Supprimez ensuite l'index et faites de même avec un index GIN.Comparez les valeurs et vous obtiendrez la réponse dont vous avez besoin, basée sur vos données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top