Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Gibt es einen schwerwiegenden Leistungseinbruch bei der Verwendung von Fremdschlüsseln in SQL Server?

Bei Einfügungen, Aktualisierungen und Löschungen gibt es einen kleinen Leistungseinbruch, da der FK überprüft werden muss. Für einen einzelnen Datensatz wäre dies normalerweise so gering, dass es nicht bemerkt wird, es sei denn, Sie haben eine lächerliche Anzahl von FKs, die der Tabelle zugeordnet sind (es dauert eindeutig länger, 100 andere Tabellen zu überprüfen als 2). Das ist gut und nicht schlecht, da Datenbanken ohne Integrität nicht vertrauenswürdig und somit nutzlos sind. Sie sollten Integrität nicht gegen Geschwindigkeit eintauschen. Dieser Leistungseinbruch wird normalerweise durch die bessere Fähigkeit zur Optimierung von Ausführungsplänen ausgeglichen.

Wir haben eine mittelgroße Datenbank mit rund 9 Millionen Datensätzen und FKs überall dort, wo sie sein sollten, und bemerken selten einen Leistungseinbruch (außer bei einer schlecht gestalteten Tabelle mit weit über 100 Fremdschlüsseln ist es etwas langsam, Datensätze daraus zu löschen muss überprüft werden). Fast jeder dba, den ich kenne, der sich mit großen Datenbanken im Terabyte-Bereich und einem echten Bedarf an hoher Leistung bei großen Datensätzen befasst, besteht auf Fremdschlüsselbeschränkungen, da Integrität der Schlüssel zu jeder Datenbank ist. Wenn sich die Leute mit Terabyte-großen Datenbanken den sehr kleinen Leistungseinbruch 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 zu denselben aus Ihrer Datenbank ohne die FKs anzeigen. Zeigen Sie, dass Sie keinen Leistungseinbruch verursachen. Zeigen Sie dann die Ergebnisse von Abfragen an, die verwaiste Datensätze anzeigen, die keine Bedeutung mehr haben, weil der PK, auf den sie sich beziehen, nicht mehr vorhanden ist. Es ist besonders effektiv, dies für Tabellen anzuzeigen, die Finanzinformationen enthalten („Wir haben 2700 Bestellungen, die wir keinem Kunden zuordnen können“ wird das Management aufhorchen lassen).