Announcement

Collapse
No announcement yet.

Speicher bei NULL-Werten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Speicher bei NULL-Werten

    Hi,

    Wieviel Speicherplatz wird beim SQL Server 2005 SP2 physikalisch für ein Feld belegt, dass mit NULL gefüllt ist?
    Hier habe ich gelesen
    Starting in SQL Server 7.0, only varchar, varbinary, LOB and sqlvariant columns are stored as variable length, and all other columns are stored as fixed length. Every column uses the full defined width. Each row contains a ‘NULL bitmap’ with a bit to indicate whether a column actually is null is that row.
    ,dass offensichtlich nur Datenfelder mit variabler Länge wirklich null Byte belegen.
    D.h. im Umkehrschluss, dass Integer & Co. ganz normal ihre feste Feldlänge belegen, ganz egal wmoit sie gefüllt sind.

    Hat jemand da irgendeine Doku von Microsoft zu? Ich find da einfach nichts!
    Ich glaub', ich brauch' Urlaub!

    Gruß und schönes Wochenende,
    Karsten

    Nachtrag:
    -----------------------------------------------------------------------------------------

    create database testNULL
    GO
    use testNULL
    GO
    create table testNULL1 ( id int identity(1,1) not null, i int null )
    create table testNULL2 ( id int identity(1,1) not null, i int null )
    GO

    declare @i int
    set @i = 0
    while (@i < 100100) BEGIN
    insert into testNULL1 ( i ) VALUES ( NULL )
    insert into testNULL2 ( i ) VALUES ( 12 )
    SET @i = @i +1
    END

    exec sp_spaceused N'testNULL1'
    exec sp_spaceused N'testNULL2'

    use tempdb
    GO
    Drop database testNULL

    Ausgabe:
    =======
    testNULL1 100100 1800 KB 1768 KB 8 KB 24 KB
    testNULL2 100100 1800 KB 1768 KB 8 KB 24 KB

    q.e.d.
    Zuletzt editiert von Rumtata; 16.05.2008, 17:49. Reason: Eigener Test

  • #2
    Hallo,

    der SQL Server muss immer dann zusätzlichen Speicherplatz vorsehen, wenn eine Spalte auch den NULL-Zustand zulässt. Erst ab dem MS SQL Server 2008 kann bei der CREATE TABLE dieser Platzbedarf über SPARSE NULL optimiert werden, wenn die allermeisten Datensätze an dieser Stelle nur den NULL-Zustand aufweisen. Allerdings wird gegenüber früheren SQL Server-Versionen immer dann mehr Speicherplatz benötigt, wenn in dieser Spalten ein Wert abgelegt wird. Somit eignet sich die Kennzeichnung über SPARSE NULL nur dann, wenn mehr als die Hälfte aller Datensätze in diesen Feldern nur den NULL-Zustand aufweist, so dass eine Sparse Column ca. 40% weniger Speicherplatz benötigt.

    ...dass offensichtlich nur Datenfelder mit variabler Länge wirklich null Byte belegen
    Nicht wenn diese Felder den NULL-Zustand zulassen. Bei einem VARCHAR(9) muss ja eine leere Zeichenkette (0 Zeichen) vom undefinierten Zustand (NULL) unterscheidbar sein. Wenn eine Tabelle aus sehr vielen NULL-Spalten besteht, ist der benötigte Speicherplatz nicht mehr vernachlässigbar ;-)
    Zuletzt editiert von Andreas Kosch; 19.05.2008, 08:27.

    Comment

    Working...
    X