Ich versuche nicht, die UUID vs serielle Integer-Schlüssel-Debatte neu zu starten. Ich weiß, dass es zu beiden Seiten gültige Punkte gibt. Ich verwende UUIDs als Primärschlüssel in mehreren meiner Tabellen.
"uuidKey" text NOT NULL
CREATE UNIQUE INDEX grand_pkey ON grand USING btree ("uuidKey")
ADD CONSTRAINT grand_pkey PRIMARY KEY ("uuidKey");
Hier ist meine erste Frage; Mit PostgreSQL 9.4 gibt es einen Leistungsvorteil beim Festlegen des Spaltentyps auf UUID?
Die Dokumentation Ссылка beschreibt die UUIDs, aber gibt es einen gewissen Nutzen neben der Typensicherheit um diesen Typ anstelle von text
type zu verwenden? In der Dokumentation der Zeichentypen wird angezeigt, dass char(n)
keinen Vorteil gegenüber text
in PostgreSQL hat.
Tipp: Unter diesen drei Typen gibt es keinen Leistungsunterschied von erhöhtem Speicherplatz, wenn der Typ mit leerer Aufschrift verwendet wird, und a einige zusätzliche CPU-Zyklen, um die Länge beim Speichern in einem zu überprüfen Länge eingeschränkte Spalte. Während Charakter (n) Leistung hat Vorteile in einigen anderen Datenbanksystemen gibt es keinen solchen Vorteil in PostgreSQL; Tatsächlich ist Charakter (n) normalerweise der langsamste der drei wegen seiner zusätzlichen Lagerkosten. In den meisten Situationen Text oder Zeichenvariation sollte stattdessen verwendet werden.
Ich mache mir keine Gedanken über Speicherplatz, ich frage mich nur, ob es sich lohnt, Benchmarks für UUID und Textspalten zu vergleichen?
Zweite Frage, Hash-vs-B-Baum-Indizes. Es ist sinnlos, UUID-Schlüssel zu sortieren, also hätte b-tree andere Vorteile als der Hash-Index?
A UUID
ist ein 16-Byte-Wert. Dasselbe wie text
ist ein 32-Byte-Wert. Die Speichergrößen sind:
Kleinere Tabellen führen zu schnelleren Operationen.
Tags und Links postgresql indexing hash uuid