Effizienz des zusammengesetzten Primärschlüssels als Fremdschlüssel

12

Ich habe eine Tabelle mit einem zusammengesetzten Primärschlüssel (bestehend aus 4 Spalten), mit der sichergestellt wird, dass keine Duplikate in die Tabelle eingegeben werden. Ich benötige jetzt eine neue Tabelle, die die Schlüssel in dieser Tabelle als Fremdschlüssel referenzieren muss.

Meine Frage ist, welcher Ansatz für Suchgeschwindigkeiten effizienter ist:

1) Erstelle ich die neue Tabelle mit allen 4 Spalten und referenziere sie alle in einem Fremdschlüssel?

oder

2) Erstelle ich eine neue Identitätsspalte in der Primärschlüsseltabelle und verwende diese als Fremdschlüssel in der neuen Tabelle.

Diese Datenbank wird voraussichtlich eine sehr große Datenmenge enthalten, daher habe ich sie bis jetzt aufgebaut, um die in jeder Tabelle enthaltene Datenmenge zu minimieren. Vor diesem Hintergrund ist Option 2 der beste Ansatz, da ich 2 int-Spalten und eine datetime-Spalte für jede Zeile speichere, aber ich möchte vermeiden, die Nachschlagezeit zu erhöhen, wenn dies nicht erforderlich ist.

Aaroncatlin
quelle
1
Ich persönlich würde INT IDENTITYin einem solchen Fall fast immer einen Ersatzschlüssel (z. B. einen ) verwenden - das Referenzieren und Zusammenfügen dieser Tabelle ist sooooo viel einfacher. Um Duplikate zu vermeiden, legen Sie eine UNIQUE- Einschränkung für diese vier Spalten fest. Außerdem: Aus Performancegründen sind schmale Primärschlüssel viel besser (wenn sie als Clustering-Schlüssel verwendet werden)
marc_s 03.10.13

Antworten:

11

Die Kosten für die Verwendung einer einfachen synthetischen Ganzzahl PK sind gering und der Nutzen in Ihrem Fall wäre wahrscheinlich beträchtlich.

  • Wie Sie hervorheben, haben Sie eine viel einfachere FK-Beziehung.
  • Eine kleine PK ergibt kleine (und schnelle) Indizes. Ihr gesamter Tabellenbereich wird wahrscheinlich durch Hinzufügen einer solchen Spalte verringert.
  • Wenn sich Geschäftsregeln ändern, müssen Sie die Tabelle nicht neu anordnen.

Der einzige wesentliche Nachteil, der Ihnen in den Sinn kommt, ist, dass Sie möglicherweise die Leistung bei Abfragen verlieren, die vom Clustering auf der zusammengesetzten PK profitiert haben. Wenn Sie der Meinung sind, dass dies wahrscheinlich von Bedeutung ist, setzen Sie die Clusterbildung für den zusammengesetzten Kandidatenschlüssel fort, setzen Sie jedoch die PK auf den synthetischen Schlüssel.

Jon aller Berufe
quelle
5

Wie so oft in der SQL-Welt lautet die Antwort: "Es kommt darauf an."

Schauen Sie sich diese Frage für einige Hinweise an: Bieten natürliche Schlüssel in SQL Server eine höhere oder niedrigere Leistung als ganzzahlige Ersatzschlüssel?

Es gibt Fälle, in denen sich die Leistung verbessert, wenn natürliche Schlüssel als Fremdschlüssel verwendet werden. In den meisten Fällen werden Sie jedoch mit kleineren Schlüsseln (sprich: Ersatzschlüssel) besser zurechtkommen.

Wenn Sie diese IDENTITY-Spalte einführen, würde ich sie sogar zum Primärschlüssel machen und die "natürlichen" Spalten so ändern, dass sie stattdessen eine EINZIGARTIGE BESCHRÄNKUNG sind.

Sebastian Meine
quelle