2010-09-06 6 views

Antwort

35

Jeder Fremdschlüssel? Nein. Wenn die Selektivität niedrig ist (d. H. Viele Werte werden dupliziert), kann ein Index teurer sein als ein Tabellenscan. In einer Umgebung mit hoher Aktivität (viel mehr Aktivität einfügen/aktualisieren/löschen als Abfragen) können sich die Kosten für die Wartung der Indizes auf die Gesamtleistung des Systems auswirken.

+1

OK. Gibt es also ein numerisches Limit oder einen Grenzwert, der die Erstellung eines Indexes auslösen kann? – GRGodoi

11

Der Grund für die Indexierung einer Fremdschlüsselspalte ist derselbe wie der Grund für die Indexierung einer anderen Spalte: Erstellen Sie einen Index, wenn Sie Zeilen nach der Spalte filtern möchten.

Wenn Sie beispielsweise Tabelle [Benutzer] (ID int, Name varchar (50)) und Tabelle [UserAction] (UserID int, Aktion varchar (50)) haben, werden Sie höchstwahrscheinlich in der Lage sein, was zu finden Aktionen eines bestimmten Benutzers. Zum Beispiel werden Sie die folgende Abfrage ausführen:

select ActionName from [UserAction] where UserID = @UserID 

Wenn Sie Zeilen nicht beabsichtigen, durch die Spalte zu filtern, dann gibt es keine Notwendigkeit, einen Index auf sie zu setzen. Und selbst wenn Sie es tun, ist es das nur wert, wenn Sie mehr als 20 - 30 Zeilen haben.

+0

Sind Sie sicher, dass der Index während der Validierung des Fremdschlüssels nicht nützlich ist, wenn ich eine Einfügung in UserAction führe? – GRGodoi

+1

Nein. Die Validierung erfolgt anhand der Tabelle und Spalte, die den Primärschlüssel oder die eindeutige Einschränkung enthält (z. B. [Benutzer]. [ID]). Die Benutzer-ID-Spalte der Tabelle [UserAction] muss nicht überprüft werden. Sie können nur auf eine Spalte verweisen, die über einen Primärschlüssel oder eine eindeutige Integritätsregel verfügt, sodass sie immer indiziert wird. – ItsMe

+2

Die andere Aktion, die in Betracht gezogen werden muss, ist das Löschen von Zeilen von 'User', was dazu führt, dass die Engine nach Zeilen in' UserAction' sucht, basierend auf 'UserID'. –

5

Von MSDN: FOREIGN KEY Constraints

einen Index auf einem Fremdschlüssel zu erstellen ist oft sinnvoll, aus den folgenden Gründen:

  • Änderungen an PRIMARY KEY-Einschränkungen werden mit FOREIGN KEY-Einschränkungen in verwandten Tabellen geprüft.
  • Fremdschlüsselspalten werden häufig in Verknüpfungskriterien verwendet, wenn die Daten aus verknüpften Tabellen in Abfragen kombiniert werden, indem die Spalte oder Spalten in der FOREIGN KEY-Einschränkung einer Tabelle mit der primären oder eindeutigen Schlüsselspalte oder Spalten in der anderen Tabelle abgeglichen werden.
Verwandte Themen