J'ai un schéma hérité (avertissement!) Qui utilise un identifiant généré par hachage pour la clé primaire de toutes les tables (il y en a beaucoup). Un exemple d'un tel identifiant est:
922475bb-ad93-43ee-9487-d2671b886479
Il n'y a aucun espoir possible de changer cette approche, mais les performances avec l'accès à l'index sont médiocres. Abstraction faite de la myriade de raisons , cela pourrait être, il y a une chose que j'ai remarqué qui semblait moins optimale - malgré toutes les valeurs id dans toutes les nombreuses tables étant exactement 36 caractères, le type de colonne est varchar(36)
, non char(36)
.
La modification des types de colonnes à longueur fixe char(36)
offrirait-elle des avantages significatifs en termes de performances d'index, au-delà de la très faible augmentation du nombre d'entrées par page d'index, etc.?
C'est-à-dire que les postgres fonctionnent beaucoup plus rapidement lorsqu'il s'agit de types de longueur fixe que de types de longueur variable?
Veuillez ne pas mentionner l'économie de stockage minuscule - cela n'aura pas d'importance par rapport à la chirurgie nécessaire pour effectuer la modification des colonnes.
la source
char(n)
presque jamais en aucune façon. Ne l'utilisez pas. Les types de donnéestext
etvarchar
(sans modificateur de longueur) sont compatibles binaires et partagent les mêmes caractéristiques de performances. Il y a des raisons historiques pour que les deux coexistent à Postgres. En interne,text
est le type "préféré" parmi les types de chaîne (qui peut influencer la résolution du type de fonction). Les cycles du processeur pour appliquer àvarchar(n)
peine la matière. Utilisez une restriction de longueur lorsque vous en avez besoin . Dans le cas présent,uuid
c'est le vrai gagnant.