Question

J'ai une contrainte unique sur un caractère variable de la colonne qui pour la plupart ont des longueurs d'environ 600 mais pourrait atteindre 10 millions de dollars.

J'ai lu sur B-Arbres, mais je ne peux pas déterminer la quantité d'espace disque de l'indice de consommer ou si une telle grande taille, les valeurs de prévenir l'indice de fonctionnement performantly.

Quels sont les impacts sur l'espace disque et le temps d'un index B-Tree sur le caractère variable de colonnes avec potentiellement de grandes longueurs?

Était-ce utile?

La solution

Dans Postgres, une contrainte unique est mis en œuvre avec un unique Index B-tree. Par la documentation:

L'ajout d'une contrainte unique créera automatiquement un unique arbre index sur la colonne ou un groupe de colonnes utilisées dans la contrainte.

Index utilisent la même base de stocker, de mécanismes de tables:les tableaux des pages de données.Les indices ont quelques petites fonctionnalités supplémentaires. Par la documentation:

Dans une table, d'un élément est une ligne;dans un index, un élément est une entrée d'index.

Chaque table et index est stocké dans un tableau de pages de taille fixe (généralement de 8 kB, bien que le format de page peut être sélectionné lors de l' la compilation du serveur).

La taille maximale d'une entrée d'index est d'un tiers de la page de données, je cite Peter Eisentraut sur ceci:
PostgreSQL clé primaire limite de longueur

C'est 2730 octets (ou un peu moins).Ce qui signifie que votre UNIQUE contrainte n'est pas possible.

Je voudrais considérer l'ajout d'une colonne redondante avec une valeur de hachage et de créer un index unique sur que.
Vous pouvez utiliser la fonction intégrée md5() ou quelque chose de plus efficace pour les valeurs énormes.

Voici une solution avec un accent sur performance:
Indice max taille de la ligne d'erreur

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top