Was ist der Unterschied einen eindeutigen Index als „Index“ oder als „Zwang“ in SQL Server zwischen dem Erstellen?

StackOverflow https://stackoverflow.com/questions/222065

Frage

Wenn Sie einen Index über eine Säule zu schaffen, die UNIQUE (aber nicht der Primärschlüssel der Tabelle) sein wird, SQL Server let wählen Sie mich ein paar Optionen:

1) Ich kann wählen, denn es ist ein Constraint oder ein Index zu sein.
Ich vermute, dies bedeutet, dass wenn ich es als Zwang gesetzt ist, wird es nicht verwenden, wenn die Abfrage, nur beim Schreiben. Allerdings ist die einzige effiziente Möglichkeit, die ich denken kann für SQL Server, die Einschränkung zu erzwingen ist, indem tatsächlich einen Index. Was ist die Verwendung für diese Option?

2) Auch wenn ich es als „Index“ gesetzt, es sich mir angeben, dass es doppelte Schlüssel ignorieren sollte. Dies ist der rätselhafteste für mich ...
Ich denke, wieder bedeutet es das Gegenteil von Zwang. Es bedeutet wahrscheinlich „verwenden, wenn die Abfrage, aber nicht einmal überprüft beim Schreiben“.
Aber warum dann würde ich setze es als einzigartig?
Ich vermute, es gibt einige Optimierungen SQL Server tun, aber ich möchte es besser verstehen.

Hat jemand wissen, was genau SQL Server funktioniert mit diesen Optionen?
Was ist der Anwendungsfall einen Index eindeutig zu sein für die Einstellung, aber doppelten Schlüssel ignorieren?

Hinweis: Dies ist für SQL Server 2000


EDIT: Nach dem, was Sie gesagt haben, aber ... Wenn ich einen Constraint erstellen, wird es verwendet werden, um Abfragen zu beschleunigen, die Filter, um die Felder in der Einschränkung mit

?

Danke!

War es hilfreich?

Lösung

Ein UNIQUE Einschränkung ist Teil der ISO / ANSI SQL-Standard, während Indizes sind nicht, weil die Standard-Implementierung Agnostiker ist. SQL Server, gemeinsam mit den meisten SQL-Datenbanksystemen, wird einen Index verwenden, um eine UNIQUE Einschränkung zu implementieren.

Argumentieren, mit UNIQUE anstattem Index in einem SQL-Skript ist leicht mehr tragbar, aber wie immer die proprietäre Syntax sollte nicht ausgeschlossen werden, wenn es Möglichkeiten zur Optimierung provids etc.

Andere Tipps

SQL Server einen Index zu implementieren UNIQUE-Einschränkungen bauen. Sie können einen Verweis auf den eindeutigen Index sehen, die eindeutige Einschränkungen in der zu erzwingen verwendet wird sys.key_constraints Ansicht (2005 - sorry, ich weiß nicht, in die 2000-äquivalent). Aber beide Versionen werden den Index verwenden, wenn die Abfrage.

Der Unterschied besteht darin, dass, wenn Sie einen Index erstellen Sie mehr Kontrolle darüber, wie es gebaut ist. Insbesondere können Sie zusätzliche Spalten enthalten, die häufig nachgeschlagen werden kann zusammen mit dem Schlüssel.

Beide Optionen können Sie auf „ignorieren Nachschlüssel“ auf vorhandenen Daten, aber beide einen Fehler auslösen, wenn Sie eine einzufügen versuchen neue Wert, der eine vorhandene Dubletten ein.

Es gibt keinen praktischen Unterschied zwischen einem eindeutigen Constraint und einem eindeutigen Index anders als die Tatsache, dass die eindeutige Einschränkung auch als Einschränkung Objekt in der Datenbank aufgeführt ist.

Laut MSDN gibt es keine signifikanten Unterschiede zwischen einem eindeutigen Index durch eine eindeutige Einschränkung erstellen oder explizit Erstellen von UNIQUE INDEX-Anweisung CREATE. In beiden Fällen werden die Daten für Einzigartigkeit in der gleichen Art und Weise validiert und auch der Abfrageoptimierer nicht behandelt sie nicht anders. Als gute Praxis verwendet eindeutige Einschränkung, wenn die Datenintegrität ist das Ziel, andere sinnvolle Nutzung direkt UNIQUE INDEX-Anweisung CREATE.

hier ist ein ausgezeichneter Artikel und ein Video erklärt den Unterschied zwischen den beiden Ansätzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top