Primärschlüssel vs. eindeutiger Index: Leistungsunterschied zu Fremdschlüsseln?

7

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
Daniel
quelle
2
Nein, das sollte es nicht geben, diese aktuelle Frage behauptet, dass es sie gibt, aber ich habe so etwas noch nie gesehen und bin etwas skeptisch ...
Martin Smith
Dies kann der Fall sein, wenn Sie nicht beide gruppiert oder nicht gruppiert angegeben haben. Wenn beide gruppiert oder nicht gruppiert sind, sollte es keinen Unterschied geben.
Gulli Meel

Antworten:

4

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

  • Wenn Sie für jede Zeile einen Bezeichner behalten möchten. So kann jede Zeile durch den Schlüsselwert obtianisiert werden (da pk eindeutig und nicht null ist)

Einzigartiger Schlüssel

  • Wenn Sie die sekundäre Kennung beibehalten möchten, wenn die primäre bereits in derselben Tabelle vorhanden ist. So kann jede Zeile von Ihrer PK oder UK erhalten werden. Unique erlaubt null, aber nur einmal (was ist die Verwendung, um einzelne null zuzulassen).

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


quelle
Ja, entschuldigen Sie die schlechte Sache: /
3

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).

Clustered Index

Indizes

crokusek
quelle