Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Eindeutiger Schlüssel vs. eindeutiger Index auf SQL Server 2008

Ein eindeutiger Constraint wird hinter den Kulissen als eindeutiger Index implementiert, daher spielt es keine Rolle, wie Sie ihn angeben. Ich neige dazu, es einfach wie folgt zu implementieren:

ALTER TABLE dbo.foo ADD CONSTRAINT UQ_bar UNIQUE(bar);

Einige Leute erstellen stattdessen einen eindeutigen Index, z. B.

CREATE UNIQUE INDEX IX_UQ_Bar ON dbo.foo(bar);

Der Unterschied liegt in der Absicht - wenn Sie die Einschränkung erstellen, um Eindeutigkeit/Geschäftsregeln zu erzwingen, erstellen Sie eine Einschränkung, wenn Sie dies tun, um die Abfrageleistung zu unterstützen, ist es möglicherweise logischer, einen eindeutigen Index zu erstellen. Unter der Decke ist es wieder dieselbe Implementierung, aber der Weg, den Sie einschlagen, um dorthin zu gelangen, kann helfen, Ihre Absicht zu dokumentieren.

Ich denke, es gibt mehrere Möglichkeiten, sowohl die frühere Sybase-Funktionalität als auch den ANSI-Standard einzuhalten (obwohl eindeutige Einschränkungen nicht zu 100% dem Standard entsprechen, da sie nur einen NULL-Wert zulassen - einen eindeutigen Index, auf Andererseits können Sie dies umgehen, indem Sie ein WHERE hinzufügen -Klausel (WHERE col IS NOT NULL ) auf SQL Server 2008 und höher).