Bitte löschen Sie meine Zweifel darüber, In SQL Server (2000 und höher) ist Primärschlüssel automatisch clusterindiziert oder haben wir die Wahl, nicht gruppierten Index auf Primärschlüssel zu haben?Ist der Primärschlüssel immer geclustert?
Antwort
Nein, es kann nicht gruppiert sein. Wenn Sie ihn jedoch nicht explizit als nicht gruppiert definieren und kein Clustered-Index für die Tabelle vorhanden ist, wird er als Cluster erstellt.
Man könnte auch hinzufügen, dass es oft SCHLECHT ist, den Primärschlüssel zu gruppieren. Insbesondere, wenn der Primärschlüssel durch eine IDENTITÄT zugewiesen ist, hat er keine intrinsische Bedeutung, so dass jede Anstrengung, die Tabelle entsprechend zu halten, verschwendet würde.
Betrachten Sie eine Tabelle Produkt, mit ProductID INT IDENTITY PRIMARY KEY. Wenn dies gruppiert ist, werden Produkte, die in irgendeiner Weise verwandt sind, wahrscheinlich über die gesamte Platte verteilt. Es könnte besser sein, nach etwas zu gruppieren, auf dem wir wahrscheinlich abfragen werden, wie die ManufacturerID oder die CategoryID. In jedem dieser Fälle würde ein gruppierter Index (da andere Dinge gleich sind) die entsprechende Abfrage viel effizienter machen.
Auf der anderen Seite könnte der Fremdschlüssel in einer untergeordneten Tabelle, die darauf verweist, ein guter Kandidat für Clustering sein (mein Einwand bezieht sich auf die Spalte, die tatsächlich das IDENTITY-Attribut hat, nicht seine Verwandten). In meinem obigen Beispiel ist es also wahrscheinlich, dass ManufacturerID ein Fremdschlüssel für eine Manufacturer-Tabelle ist, wo sie als IDENTITY festgelegt wird. Die Spalte sollte nicht gruppiert sein, aber die Spalte in Produkt, das darauf verweist, könnte dies zu einem guten Ergebnis machen.
- 1. Wie ändert man den Primärschlüssel, um nicht geclustert zu werden?
- 2. Primärschlüssel wird immer in SQL Server indiziert?
- 3. MVC5 Primärschlüssel nimmt immer die Sequenz
- 4. Wird 'Auswählen' immer nach Primärschlüssel sortiert?
- 5. Ist der Primärschlüssel nützlich, wenn nie
- 6. Quartz & Spring - Geclustert, aber nicht dauerhaft?
- 7. document.readyState == "Vollständig" ist immer falsch. Der Staat ist immer „interaktiv“
- 8. Wie Apache Kamel Quarz2 Scheduler geclustert
- 9. Primärschlüssel in Cassandra ist einzigartig?
- 10. * neu ist immer falsch. IMMER
- 11. Datenbank: Sollten Tabellen immer normalisiert sein und Primärschlüssel haben?
- 12. Entity Framework "Verletzung der Primärschlüssel" mit zusammengesetzten Primärschlüssel
- 13. Core Primärschlüssel
- 14. Erhalte Primärschlüssel der Eloquent Modellinstanz
- 15. Primärschlüssel
- 16. Wie wird der Primärschlüssel aktualisiert?
- 17. Was ist der Unterschied zwischen Primärschlüssel und Hauptattribut?
- 18. Was ist der Unterschied zwischen einem Primärschlüssel und einem Ersatzschlüssel?
- 19. Suchen Sie eine Tabelle, wo der Primärschlüssel bekannt ist
- 20. Begrenzung der Zeichenzahl für Primärschlüssel
- 21. Ist das Schließen der Ressourcen immer wichtig?
- 22. BLOB in der Datenbank ist immer leer
- 23. Verwendung der Schnittstelle ist immer hilfreich?
- 24. Ist ein Primärschlüssel automatisch ein Index?
- 25. In Android Sqlite ist ROWID wie Primärschlüssel?
- 26. Ist der Prozessname immer der Name der EXE?
- 27. SQL: Zum Primärschlüssel oder nicht zum Primärschlüssel?
- 28. hitTest.RowIndex ist immer -1
- 29. Zurücksetzen der Primärschlüssel-ID in Schienen
- 30. Ist EOF immer negativ?
Das Vorhandensein von Identität in den meisten Fällen bedeutet, dass Zugriff auf Datensätze über ihre Identität wird, so scheint der gruppierte Primärschlüssel auf Identität Feld eine gute Idee zu sein. –
@ C-F - das ist kein Grund zum Clustering. Wenn Sie basierend auf diesem Primärschlüssel abfragen, wird der Index Sie dorthin bringen. Und möglicherweise auch schneller, da es mit ziemlicher Sicherheit weniger IOs benötigt, um einen relativ engen Index im Vergleich zur vollen Breite der Zeilen im Clustered-Index zu erreichen. –