Ich habe ein Legacy-Schema (Haftungsausschluss!), Das eine Hash-basierte generierte ID für den Primärschlüssel für alle Tabellen verwendet (es gibt viele). Ein Beispiel für eine solche ID ist:
922475bb-ad93-43ee-9487-d2671b886479
Es gibt keine Hoffnung, diesen Ansatz zu ändern, jedoch ist die Leistung beim Indexzugriff schlecht. Abgesehen von der Vielzahl von Gründen dies sein könnte, gibt es eine Sache , die ich bemerkte , die weniger als optimal schienen - trotz alles ID - Werte in allen vielen Tabellen genau 36 Zeichen lang sind, ist der Spalt Typ varchar(36)
, nicht char(36)
.
Würde die Änderung der Spaltentypen auf eine feste Länge erhebliche Vorteile für die Indexleistung char(36)
bieten , abgesehen von der sehr geringen Zunahme der Anzahl der Einträge pro Indexseite usw.?
Dh, sind Postgres bei Typen mit fester Länge viel schneller als bei Typen mit variabler Länge?
Bitte erwähnen Sie nicht die winzige Einsparung an Speicherplatz - das ist im Vergleich zu der Operation, die erforderlich ist, um die Änderungen an den Säulen vorzunehmen, egal.
quelle
char(n)
fast nie in irgendeiner Hinsicht. Benutze es nicht. Die Datentypentext
undvarchar
(ohne Längenmodifikator) sind binär kompatibel und weisen dieselben Leistungsmerkmale auf. Es gibt historische Gründe, warum beide in Postgres koexistieren. Interntext
ist der "bevorzugte" Typ unter den Zeichenfolgentypen (der die Funktionstypauflösung beeinflussen kann). Die CPU-Zyklen zur Durchsetzung spielenvarchar(n)
kaum eine Rolle. Verwenden Sie bei Bedarf eine Längenbeschränkung . Im vorliegenden Falluuid
ist der eigentliche Gewinner.