web-dev-qa-db-fra.com

Calcul de taille d'index postgres

Y a-t-il un moyen de déterminer une estimation approximative de la taille (sur disque) d'un index avant de la créer? La taille de la table et chaque colonne sont connues. Je suis particulièrement intéressé par GIN index. Aussi toute information sur la manière dont la taille des différents types d'index se rapportent aux autres est appréciée. Existe-t-il une règle générale comme un indice GIN _ est toujours plus grand qu'un B-TREE index? Ou est-ce trop dépendant de la taille et de la distribution de données?

Pour clarifier: Je ne cherche pas un outil. Je suis heureux de le faire à la main.

2
maax

Il n'y a pas de moyen général de répondre à cela (autre que l'essayer sur votre serveur de test et voir). Gin prend en charge de nombreux opérateurs différents, tels que Tsvector ou Trigrams, et ils ont des caractéristiques différentes. Dans les versions plus récentes, les index gin utilisent la compression qui peut être assez impressionnante lorsque la même valeur de clé apparaît encore et encore. Mais ce niveau de compression dépend de la commande des rangées.

Par exemple, si j'expose une seule colonne de texte avec de nombreuses valeurs en double (environ 50 millions de lignes, avec environ 1,5 million de valeurs distinctes, en utilisant le btree_gin Extension pour le gin), je reçois 2010 MB pour l'index B-Tree et 435 Mo pour l'indice GIN. Donc non, le gin n'est pas toujours plus grand. Mais en général (c'est-à-dire autre qu'avec Btree_gin), vous n'exposez pas les mêmes types de données avec Gin que vous le faites avec B-Tree, une comparaison directe des tailles n'a pas beaucoup de sens.

3
jjanes