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
,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.
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.
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.
Comment