HINWEIS: Diese Antwort Adressen der Enterprise-Klasse Entwicklung in-the-large .
Dies ist ein RDBMS-Problem, nicht nur SQL Server, und das Verhalten kann sehr interessant sein. Zum einen ist es üblich, dass Primärschlüssel automatisch (eindeutig) indiziert werden, aber NICHT absolut. Es gibt Zeiten, in denen es wichtig ist, dass ein Primärschlüssel NICHT eindeutig indiziert wird.
In den meisten RDBMS wird automatisch ein eindeutiger Index für einen Primärschlüssel erstellt, sofern noch keiner vorhanden ist . Daher können Sie einen eigenen Index für die Primärschlüsselspalte erstellen, bevor Sie ihn als Primärschlüssel deklarieren. Dieser Index wird dann (falls akzeptabel) vom Datenbankmodul verwendet, wenn Sie die Primärschlüsseldeklaration anwenden. Oft können Sie den Primärschlüssel erstellen und zulassen, dass sein eindeutiger Standardindex erstellt wird. Erstellen Sie dann Ihren eigenen alternativen Index für diese Spalte und löschen Sie den Standardindex.
Nun zum lustigen Teil - wann möchten Sie KEINEN eindeutigen Primärschlüsselindex? Sie möchten keine und können keine tolerieren, wenn Ihre Tabelle genügend Daten (Zeilen) erfasst, um die Pflege des Index zu teuer zu machen. Dies hängt von der Hardware, der RDBMS-Engine, den Eigenschaften der Tabelle und der Datenbank sowie der Systemlast ab. Es beginnt sich jedoch normalerweise zu manifestieren, sobald eine Tabelle einige Millionen Zeilen erreicht.
Das wesentliche Problem besteht darin, dass jede Einfügung einer Zeile oder Aktualisierung der Primärschlüsselspalte zu einem Index-Scan führt, um die Eindeutigkeit sicherzustellen. Dieser eindeutige Index-Scan (oder dessen Äquivalent in jedem RDBMS) wird mit zunehmendem Wachstum der Tabelle viel teurer, bis er die Leistung der Tabelle dominiert.
Ich habe dieses Problem viele Male mit Tabellen behandelt, die zwei Milliarden Zeilen, 8 TB Speicher und vierzig Millionen Zeileneinfügungen pro Tag umfassen. Ich wurde beauftragt, das betreffende System neu zu gestalten, wobei der eindeutige Primärschlüsselindex praktisch als erster Schritt gelöscht wurde. In der Tat war es notwendig, diesen Index in der Produktion zu löschen, um sich von einem Ausfall zu erholen, bevor wir uns überhaupt einer Neugestaltung näherten. Diese Neugestaltung beinhaltete die Suche nach anderen Möglichkeiten, um die Eindeutigkeit des Primärschlüssels sicherzustellen und einen schnellen Zugriff auf die Daten zu ermöglichen.