Genel bir günlük tablo, yaklaşık 5m satır var.
Olay türünü depolayan "güçlü bir şekilde yazılan" alan ve olayla ilgili verileri içeren bir grup "yavaş yazılan" sütun var. Yani, bu "yavaş yazılan" sütunların anlamı olayın türüne bağlıdır.
Bu sütunlar şu şekilde tanımlanır:
USER_CHAR1 nvarchar(150) null,
USER_CHAR2 nvarchar(150) null,
USER_CHAR3 nvarchar(150) null,
USER_CHAR4 nvarchar(150) null,
USER_CHAR5 nvarchar(150) null,
USER_INTEGER1 int null,
USER_INTEGER2 int null,
USER_INTEGER3 int null,
USER_INTEGER4 int null,
USER_INTEGER5 int null,
USER_FLAG1 bit null,
USER_FLAG2 bit null,
USER_FLAG3 bit null,
USER_FLAG4 bit null,
USER_FLAG5 bit null,
USER_FLOAT1 float null,
USER_FLOAT2 float null,
USER_FLOAT3 float null,
USER_FLOAT4 float null,
USER_FLOAT5 float null
Her türdeki Sütun 1 ve 2 yoğun bir şekilde kullanılır, ancak 3 numaradan başlayarak çok az sayıda etkinlik türü bu kadar bilgi sağlar. Bu nedenle her tipte 3-5 arasındaki sütunları işaretlemek istedim SPARSE
.
Önce bazı analizler yaptım ve gerçekten de, bu sütunların her birindeki verilerin en az% 80'inin ve verilerin null
% 100'ünde olduğunu gördüm null
. Göre % 40 tasarruf eşik masaya , SPARSE
üzerlerinde büyük bir kazanç olacaktır.
Bu yüzden gittim ve SPARSE
her grupta 3-5 sütunlara başvurdum . Şimdi benim masam tarafından bildirildiği gibi veri alanı yaklaşık 1.8Gb sp_spaceused
alırken, yedeklemeden önce 1Gb oldu.
Denedim dbcc cleantable
ama hiçbir etkisi olmadı.
Sonra dbcc shrinkdatabase
da etkisi yok.
Şaşkın, kaldırdım SPARSE
ve tekrarladı dbcc
. Tablonun boyutu 1.8Gb'de kaldı.
Ne oluyor?
rowid int not null identity(1,1) primary key clustered
.