Heim >Datenbank >MySQL-Tutorial >Eindeutige Postgres-Einschränkungen im Vergleich zu Indizes: Wann sollten Sie welche verwenden?
Eindeutige Einschränkungen und Indizes werden beide verwendet, um die Eindeutigkeit von Daten in Datenbanktabellen sicherzustellen. Es gibt jedoch einige wesentliche Unterschiede zwischen den beiden Ansätzen.
Eindeutige Einschränkung
CONSTRAINT
definiert. Index
CREATE INDEX
-Anweisung. Laut der Postgres-Dokumentation ist die Verwendung von ALTER TABLE ... ADD CONSTRAINT
die bevorzugte Methode, um einer Tabelle eindeutige Einschränkungen hinzuzufügen. Dies liegt daran, dass die Erstellung eindeutiger Indizes speziell zur Durchsetzung der Eindeutigkeit als Implementierungsdetail betrachtet wird und nicht direkt darauf zugegriffen werden sollte.
Leistung: Im Allgemeinen weisen eindeutige Einschränkungen und eindeutige Indizes hinsichtlich der Abfragegeschwindigkeit eine ähnliche Leistung auf. Teilindizes können jedoch die Leistung von Abfragen verbessern, die nur auf eine Teilmenge der Daten zugreifen.
Fremdschlüssel: Eindeutige Einschränkungen können durch Fremdschlüssel referenziert werden, eindeutige Indizes jedoch nicht.
Einschränkungs-Overhead: Eindeutige Einschränkungen haben im Vergleich zu eindeutigen Indizes einen leichten Overhead, da sie beim Einfügen oder Aktualisieren von Daten zusätzliche Wartungsvorgänge erfordern.
Um den Unterschied zwischen einer eindeutigen Einschränkung und einem Index zu veranschaulichen, erstellen wir eine Tabelle mit sowohl einer eindeutigen Einschränkung als auch einem eindeutigen Index:
<code class="language-sql">CREATE TABLE foo ( id SERIAL PRIMARY KEY, code INTEGER, label TEXT, CONSTRAINT foo_uq UNIQUE (code, label) ); CREATE UNIQUE INDEX foo_idx ON foo (code, label);</code>
Sowohl die eindeutige Einschränkung (foo_uq) als auch der eindeutige Index (foo_idx) erzwingen die Eindeutigkeit der Kombination (Code, Label). Sie sollten jedoch die Verwendung eindeutiger Einschränkungen bevorzugen, da dies der in Postgres empfohlene Ansatz ist.
Teilindex
Um einen Teilindex zu erstellen, verwenden Sie die CREATE INDEX
-Klausel in der WHERE
-Anweisung:
<code class="language-sql">CREATE UNIQUE INDEX foo_partial_idx ON foo (code) WHERE label IS NOT NULL;</code>
Dieser Index gilt nur für Zeilen, in denen label
nicht NULL
ist.
Einschränkungen mithilfe von Indizes hinzufügen
Sie können mithilfe von Teilindizes keine eindeutigen Einschränkungen hinzufügen. Sie können jedoch eine eindeutige Einschränkung mithilfe eines vorhandenen eindeutigen Index erstellen:
<code class="language-sql">ALTER TABLE foo ADD CONSTRAINT foo_partial_uq UNIQUE USING INDEX foo_partial_idx;</code>
Das obige ist der detaillierte Inhalt vonEindeutige Postgres-Einschränkungen im Vergleich zu Indizes: Wann sollten Sie welche verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!