Kompositclusterindex in SQL Server

8

Ich habe eine Tabelle mit einer IDENTITY-Spalte als Primärschlüssel (eine klassische ID-Spalte).

SQL Server erstellt automatisch einen Clustered-Index für diesen Primärschlüssel.

Meine Frage ist:

  • Kann ich ein einziges CLUSTERED INDEX-Composite mit mehreren Spalten haben?

Wenn ja, wie kann ich den standardmäßigen gruppierten Index löschen und einen neuen mit diesen Attributen erstellen.

Danke für Ihre Unterstützung

    
GibboK 08.07.2010, 09:12
quelle

1 Antwort

14

Ja, Sie können nur einen einzelnen gruppierten Index pro Tabelle haben - die Daten sind physisch nach diesem Index angeordnet, so dass Sie nicht mehr als einen haben können.

Ich würde jedoch nicht empfehlen, einen zusammengesetzten gruppierten Index zu verwenden. Warum? Der gruppierte Index sollte immer lauten:

  • so klein wie möglich - INT mit 4 Byte ist perfekt
  • stable - nie ändern, so dass Sie keine Aktualisierungen über alle Ihre Indizes haben
  • unique - andernfalls muss SQL Server Ihre Einträge mit künstlichen 4-Byte-Werten "vereinheitlichen"
  • optimal wäre: immer größer

INT IDENTITY ist perfekt als gruppierter Index - ich würde Ihnen raten, es so zu halten.

Die Spalte für den gruppierten Index (oder die Spaltengruppe) wird auch jedem einzelnen Eintrag jedes nicht gruppierten Index für dieselbe Tabelle hinzugefügt. Wenn Sie also Ihren gruppierten Index auf 20, 50 oder mehr Bytes vergrößern, beginnen Sie Sie verschwenden viel Speicherplatz - auf der Festplatte und im Speicher Ihres Servers, was die Systemleistung beeinträchtigt.

Lesen Sie alles über Clustered-Indizes und was sie für gute Clustered-Indizes sein sollten:

marc_s 08.07.2010, 10:22
quelle