Es gibt einen kleinen Leistungseinbruch bei Einfügungen, Aktualisierungen und Löschungen, da der FK überprüft werden muss. Für einen einzelnen Datensatz wäre dies normalerweise so gering, dass es nicht wahrnehmbar ist, es sei denn, Sie beginnen mit einer lächerlichen Anzahl von FKs, die mit der Tabelle verbunden sind (Es dauert natürlich länger, 100 andere Tabellen als 2 zu überprüfen). Dies ist eine gute Sache, keine schlechte Sache, da Datenbanken ohne Integrität nicht vertrauenswürdig und somit nutzlos sind. Sie sollten Integrität nicht für Geschwindigkeit handeln. Dieser Leistungseinbruch wird normalerweise durch die bessere Möglichkeit zur Optimierung der Ausführungspläne ausgeglichen.
Wir haben eine mittelgroße Datenbank mit etwa 9 Millionen Datensätzen und FKs überall und sollten selten einen Leistungseinbruch feststellen (außer auf einer schlecht entworfenen Tabelle mit weit über 100 Fremdschlüsseln ist das Löschen von Datensätzen etwas langsam) von diesem als alles muss überprüft werden). Fast jeder dba, der mit großen Datenbanken im Terabyte-Format zu tun hat, und der echte Bedarf an hoher Leistung bei großen Datenbeständen besteht auf Fremdschlüsseln, weil Integrität der Schlüssel zu jeder Datenbank ist. Wenn sich die Leute mit Terabyte-großen Datenbanken den sehr kleinen Performance-Hit leisten können, dann können Sie das auch.
FKs werden nicht automatisch indiziert und wenn sie nicht indiziert sind, kann dies zu Leistungsproblemen führen.
Ehrlich gesagt, würde ich eine Kopie Ihrer Datenbank nehmen, richtig indizierte FKs hinzufügen und den Zeitunterschied zum Einfügen, Löschen, Aktualisieren und Auswählen aus diesen Tabellen im Vergleich mit dem gleichen aus Ihrer Datenbank ohne die FKs zeigen. Zeigen Sie, dass Sie keinen Leistungseinbruch verursachen werden. Zeigen Sie dann die Ergebnisse von Abfragen, die verwaiste Datensätze anzeigen, die keine Bedeutung mehr haben, da die PK, auf die sie bezogen sind, nicht mehr existiert. Es ist besonders effektiv, dies für Tabellen zu zeigen, die Finanzinformationen enthalten ("Wir haben 2700 Bestellungen, die wir nicht mit einem Kunden verbinden können" wird die Geschäftsleitung aufhorchen lassen).
Nur ein Update auf die ganze Geschichte: Wir durften jetzt Fremdschlüssel verwenden, mit der Vorstellung, dass sie möglicherweise deaktiviert werden, wenn sie zu einem Leistungsverlust führen. Also vielen Dank für Ihre guten Punkte :-) – Steffen