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

Warum und wann sollte ich SPARSE COLUMN verwenden? (SQL-SERVER 2008)

Eine Sparse-Spalte benötigt nicht das Vierfache des Speicherplatzes Um einen Wert zu speichern, werden (feste) 4 zusätzliche Bytes verwendet pro Nicht-Null-Wert. (Wie Sie bereits gesagt haben, benötigt eine NULL 0 Leerzeichen.)

  • Also ein Nicht-Null-Wert, der in einem Bit gespeichert wird Spalte wäre 1 Bit + 4 Bytes =4,125 Bytes. Aber wenn 99 % davon NULL sind, ist es immer noch eine Nettoeinsparung.

  • Ein Nicht-Null-Wert, der in einer GUID (UniqueIdentifier) gespeichert ist Spalte ist 16 Bytes + 4 Bytes =20 Bytes. Wenn also nur 50 % davon NULL sind, ist das immer noch eine Nettoeinsparung.

Die "erwartete Ersparnis" hängt also stark davon ab, was Art ist der Spalte, über die wir sprechen, und Ihre Schätzung, welches Verhältnis null vs. nicht null sein wird. Spalten mit variabler Breite (Varchars) sind wahrscheinlich etwas schwieriger genau vorherzusagen.

Auf dieser Bücher-Online-Seite gibt es eine Tabelle, die den Prozentsatz anzeigt unterschiedlicher Datentypen müssten null sein, damit Sie einen Vorteil erzielen.

Also wann sollten Sie eine Sparse-Spalte verwenden? Wenn Sie erwarten, dass ein erheblicher Prozentsatz der Zeilen einen NULL-Wert hat. Einige Beispiele, die mir in den Sinn kommen:

  • Ein "Rückgabedatum der Bestellung "-Spalte in einer Bestelltabelle. Sie würden hoffen, dass ein sehr kleiner Prozentsatz der Verkäufe zu zurückgegebenen Produkten führen würde.
  • Eine "vierte Adresse " Zeile in einer Adresstabelle. Die meisten Postanschriften, selbst wenn Sie einen Abteilungsnamen und ein "Care Of" benötigen, benötigen wahrscheinlich keine 4 separaten Zeilen.
  • Ein "Suffix "-Spalte in einer Kundentabelle. Ein ziemlich geringer Prozentsatz der Leute hat ein "Jr." oder "III" oder "Esquire" nach ihrem Namen.