Gibt es einen Leistungsunterschied, wenn Sie eine Abfrage vergleichen, die Daten über einen Join zwischen zwei Tabellen abruft, bei denen eine Beziehung zu einer der folgenden Bedingungen besteht:
- Ein Primärschlüssel
- Ein eindeutiger Index
Gibt es einen Leistungsunterschied, wenn Sie eine Abfrage vergleichen, die Daten über einen Join zwischen zwei Tabellen abruft, bei denen eine Beziehung zu einer der folgenden Bedingungen besteht:
Antworten:
Es hat nichts mit der Leistung als solcher zu tun, aber es ist ein konzeptionelles Problem.
Verwenden Sie UNIQUE CONSTRAINT, um eine Tatsache anzugeben. Verwenden Sie UNIQUE INDEX, wenn Sie einen Index haben, der eindeutig ist, z. B. weil Sie ihm den Primärschlüssel hinzufügen.
Gemäß dem Szenario:
Primärschlüssel
Einzigartiger Schlüssel
Hinweis:
Beide können entweder geclustert oder nicht geclustert sein. Wenn Sie eine Einschränkung erstellen, können Sie auswählen, welchen Indextyp Sie für diese Schlüssel verwenden möchten.
Quellen:
http://social.msdn.microsoft.com/Forums/en/transactsql/thread/290619be-b892-4f52-99e0-d8e2ff80aec4
http://bytes.com/topic/sql-server/answers/83999-unique-constraint-vs-unique-index-ms-sql-2000-a
Ich bin nicht sicher, ob Ihre Frage genügend Informationen enthält, um eine gute Antwort zu geben. Ob die PK / Benutzeroberfläche geclustert oder nicht geclustert ist, ist häufig der dominierende Leistungsfaktor, wenn der resultierende Join Felder enthält, die nicht Teil der Indizes waren .
Es kann jeweils nur ein Clustered-Index für eine Tabelle vorhanden sein. Standardmäßig ist die PK geclustert. Wenn jedoch vor der Erstellung der PK ein Clustered-Index vorhanden war, wird die PK nicht gruppiert (ungewöhnlich).
Da in den meisten Fällen eine Benutzeroberfläche nach einer PK erstellt wird, ist die Benutzeroberfläche nicht geclustert und daher langsamer, wenn die Verknüpfungsergebnisse Nicht-Indexfelder aus der Zeile enthalten müssen. Wenn eine Cluster-Benutzeroberfläche anstelle einer PK erstellt wird, wird erwartet, dass die Leistung einer Cluster-PK entspricht.
Es ist auch möglich, Indizes mit "eingeschlossenen" Spalten zu erstellen. Dies umgeht das Clustering-Problem, da das Join-Ergebnis die enthaltenen Spalten verwenden kann, ohne die Zeile physisch abrufen zu müssen (da sich die Zeile an einem anderen Speicherort befindet, wenn sie nicht geclustert ist).