Categories: SQL Server

Optimierung durch Sparse Columns – Spalten mit geringer Dichte

Bis zur Version SQL Server 2005 mussten Spalten, die mit dem NULL belegt werden trotzdem Speicherplatz belegen. Das ist ok, wenn man bedenkt, dass eine Spalte auch eine leere Menge (keine Zeichen)  beinhalten kann und somit sich von NULL unterscheidet. (‘’ ist nicht NULL)

Ab Version SQL 2008 kann nun diese scheinbare Platzverschwendung beeinflusst werden. Mit Hilfe der Angabe von Sparse wird der SQL Server angewiesen keinen Platz für den NULL Wert zu belegen. Das ist insbesondere für sehr breite Tabellenlayouts wichtig. So konnten bis dato nur 1024 Spalten in SQL verwendet werden. Nun kann man Spalten auch im 5 stelligen Bereich anlegen ;-). Der Vorteil sehr breiter Tabellen liegt darin, dass evtl keine zusätzlichen abhängigen Tabellen erstellt werden müssen, in den die jeweiligen Eigenschaften abgelegt werden.

Create table Produkte
 (PrID int indentity,
 Bezeichnung varchar(50) not null,
 Kalorien varchar(10) sparse,
 Kohlenhydrate varchar(10) sparse,
 eingeschweisst varchar(2) sparse,
 ....
 )

 

Einsparung durch SPARSE

Das ganze hat allerdings seinen Preis. Sobald Felder doch nicht mit NULL belegt werden, wird mehr Platz verbraucht. Der Prozentsatz aller Felder, die NULL haben müssen, damit das noch rentabel wird liegt  je nach Datentyp bei mind. 42%!

Hier eine kleine Beispielliste, wie hoch der Prozentsatz der NULL Werte sein muss, damit ein SPARSE noch eine tatsächliche Einsparung bringt

bit  98%

uniqueidentifier 42%

date 49%

Vor und Nachteile von SPARSE

Sinnvoll ist der Einsatz dann, wenn mind 20 bis 40% Platz eingespart wird und rel. selten nach Werten ungleich NULL abgefragt wird.

Sparse Spalten haben auch noch einige kleine Nachteile: So können sie keinen Standardwert oder Regel haben. Sie kann auch nicht als Feld für einen zusammengesetzen Primärschlüssels sein oder auch eines gruppierten Index.

Auf der anderen Seite sind Sparse Columns  besonders für gefilterte Indizes interessant, da sehr viele Werte ja NULL enthalten.

Fumus

Share
Published by
Fumus

Recent Posts

SQL Server 2019 – static data masking – Du Opfer!

In SQL Server 2016 wurde das sog. dynamic data masking eingeführt. Eine Möglichkeit Daten bei…

5 Jahren ago

MinRole – Oder wie alles etwas einfacher wird

Seit Sharepoint Server 2007 präsentiert sich die Installation immer auf die gleiche Weise. Gerade mal,…

8 Jahren ago

Schritt für Schritt: SQL 2016 – Dynamic Data Masking

Es weihnachtet! Gerade bekam ich von einer Kollegin Plätzchen angeboten mit der Größe eines Diskus…

8 Jahren ago

Schritt für Schritt: SQL Server 2016 – temporal tables

Nein, bitte nicht verwechseln: temporal tables haben nichts zu tun mit temporary tables table variables…

9 Jahren ago

SQL Server 2016 Schritt für Schritt–Installation und First Look

SQL Server 2016.. habe ich schon erwähnt, dass ich den ziemlich cool finde? Wollen wir…

9 Jahren ago

SQL Server 2016 – CTP2

Nach langer Zeit wieder mal eine Artikel von mir.. der mich besonders erfreut. SQL Server…

9 Jahren ago