Ist es empfehlenswert, einen Index für jeden Fremdschlüssel in einer SQL Server-Datenbank zu erstellen?Sollte jeder SQL Server-Fremdschlüssel einen übereinstimmenden Index haben?
Antwort
Ja, es ist eine gute Übung, siehe hier: When did SQL Server stop putting indexes on Foreign Key columns? Scrollen Sie nach unten zum Gibt es Vorteile beim Indexieren von Fremdschlüsselspalten? Abschnitt
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.
OK. Gibt es also ein numerisches Limit oder einen Grenzwert, der die Erstellung eines Indexes auslösen kann? – GRGodoi
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.
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
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
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'. –
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.
- 1. Sollte ich in jeder Ansicht einen NSFetchedResultsController haben?
- 2. Persistente Hibernate-Entität sollte einen Primärschlüssel haben
- 3. Sollte ein unique_ptr einen nullptr Wert haben?
- 4. sql Datensätze mit übereinstimmenden Teilmengen auswählen
- 5. Warum sollte Sybase keinen funktionalen Index verwenden?
- 6. SQL-Objekte, die einen Index verwenden
- 7. Get Index der übereinstimmenden Wert in Liste mit LINQ
- 8. SQL-Volltextsuche Index Binärfeld
- 9. Index der maximalen Wert Element in jeder Zeile (letzten Index)
- 10. In SQL Server, sollte ich einen Index für eine Identitätsspalte erstellen oder wird es automatisch erstellt?
- 11. Ist es möglich, einen funktionsbasierten Index in MySQL zu haben?
- 12. Was bedeutet es, einen Index für skalare Variablenfehler zu haben?
- 13. Kann ich in Swift einen statischen Index haben?
- 14. Wie eine SQL-Index
- 15. Armadillo, Max Index in jeder Spalte finden
- 16. SQL - # 1064 - Sie haben einen Fehler in Ihrer SQL-Syntax;
- 17. "Der Ausdruck sollte einen Klassenzeiger haben" Visual Studio C++ Fehler
- 18. Sollte ich einen NodeJS-Server für das serverseitige Rendering haben?
- 19. Warum sollte mein Entwicklungsteam einen Build-Server haben?
- 20. Sollte eine Fabrik einen Konstruktor mit Parametern haben?
- 21. Sollte ich ein dediziertes Primärschlüsselfeld haben?
- 22. SQL Index Suche
- 23. einen Columns Erstellen Index
- 24. Capybara: sollte HTML-Inhalt haben
- 25. Schnittstelle sollte keine Eigenschaften haben?
- 26. ORACLE SQL Index-Performance
- 27. Wie finde ich einen deaktivierten Index auf SQL Server 2008
- 28. Was C# Wissen sollte ich haben?
- 29. SQL Index-Performance
- 30. HAML Index des Array-Elements jeder Schleife
Es ist eine gute Praxis in einigen Fällen, aber nicht für * jeden * Fremdschlüssel. –