Sparse (SQL)

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Sparse bezeichnet in Microsoft-SQL sowohl eine spezielle Spaltenkonfiguration, wie auch das Argument mittels der die Spalte dazu entsprechend konfiguriert wird.

Unabhängig von ihrem Datentyp (wie z. B. int, varchar oder date) können Spalten einer Datenbank je nach Konfiguration auch Nullwerte enthalten. Der Nullwert ergibt sich aber nicht einfach durch die fehlende Existenz eines Wertes, sondern muss explizit als Nullwert gespeichert werden. Dies geschieht bei Microsoft-SQL durch einen sogenannten Null-Bitmap. Wird bei einer Spalte davon ausgegangen, dass sie spärlich (sparse) besetzt sein wird, d. h. mehrheitlich Nullwerte enthalten wird, kann diese mittels des Arguments SPARSE NULL[1] zu einer Sparse-Spalte (engl. Sparse Column) konfiguriert werden. Eine Sparse-Spalte benötigt zur Speicherung von Nullwerten wirklich keinen Speicherplatz mehr, benötigt jedoch dafür mehr Speicher, wenn ein anderer Wert als der Nullwert gespeichert wird.

Beispiel[Bearbeiten | Quelltext bearbeiten]

Eine Liegenschaftsverwaltung legt für eine neue Liegenschaft eine Tabelle für ihre Mieter an. Die Liegenschaft enthält 200 Wohnungen, aber nur 5 Parkplätze. In diesem Beispiel kann man bereits beim Erstellen der Tabelle im Voraus sagen, dass die Spalte Parkplatznummer im Minimum also 195 mal den Nullwert enthalten wird, sollten alle Parkplätze vermietet worden sein. Hier lohnt es sich daher, die Spalte Parkplatznummer als Sparse-Spalte zu konfigurieren, um Speicherplatz zu sparen.

CREATE TABLE dbo.MieterLiegenschaftXYZ
    (Vorname varchar(50) PRIMARY KEY,
    Nachname varchar(50),
    Wohnungsnummer int,
    Mietzins money,
    Parkplatznummer int SPARSE NULL ) ;

Einschränkungen[Bearbeiten | Quelltext bearbeiten]

Die Verwendung von Sparse-Spalten bringt eine Reihe von Einschränkungen mit sich. Darunter die folgenden:[2]

  • Sparse-Spalten können nicht gleichzeitig als IDENTITY, ROWGUIDCOL oder NOT NULL konfiguriert werden. Wobei Letzteres als solches keinen Sinn ergeben würde.
  • Sparse-Spalten können nicht auf Spalten des Datentyps text, ntext, image, timestamp, geometry, geography oder vom Benutzer angelegte Datentypen angewendet werden.
  • Es können keine Cluster Index oder Primary Key Index auf Sparse-Spalten angewendet werden

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]

  1. Microsoft MSDN: CREATE TABLE Befehlsreferenz
  2. Blogspot: SQLTrends - Database and Sql Server