Aracılığıyla paylaş


Satır sıkıştırma uygulaması

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

Bu makalede Veritabanı Altyapısı'nın satır sıkıştırmayı nasıl uyguladığı özetlemektedir. Bu özet, verileriniz için ihtiyacınız olan depolama alanını planlamanıza yardımcı olacak temel bilgiler sağlar.

Sıkıştırmanın etkinleştirilmesi yalnızca veri türüyle ilişkili verilerin fiziksel depolama biçimini değiştirir, ancak söz dizimi veya semantiğiyle ilgili değildir. Sıkıştırma için bir veya daha fazla tablo etkinleştirildiğinde uygulama değişiklikleri gerekli değildir. Yeni kayıt depolama biçiminde aşağıdaki ana değişiklikler vardır:

  • Kayıtla ilişkili meta veri ek yükünü azaltır. Bu meta veriler sütunlar, uzunlukları ve uzaklıkları hakkında bilgidir. Bazı durumlarda meta veri yükü eski depolama biçiminden daha büyük olabilir.

  • Sayısal türler (örneğin tamsayı, ondalık ve float) ve sayısala dayalı türler (örneğin tarih saat ve para) için değişken uzunlukta depolama biçimi kullanır.

  • Sabit karakter dizelerini, boş karakterleri depolamayarak değişken uzunluklu biçimi kullanarak depolar.

Uyarı

NULL ve 0 tüm veri türlerindeki değerler optimize edilir ve hiç bayt kaplamaz.

Satır sıkıştırma depolamayı nasıl etkiler?

Aşağıdaki tabloda, satır sıkıştırmanın SQL Server ve Azure SQL Veritabanı'ndaki mevcut türleri nasıl etkilediği açıklanmaktadır. Tablo, sayfa sıkıştırma kullanılarak elde edilebilecek tasarrufları içermez.

Veri türü Depolama etkileniyor mu? Description
tinyint Hayı 1 bayt, gereken en düşük depolama alanıdır.
smallint Yes Değer 1 bayt sığdırılıyorsa yalnızca 1 bayt kullanılır.
int Yes Yalnızca gerekli olan baytları kullanır. Örneğin, bir değer 1 bayt olarak depolanabilirse, depolama yalnızca 1 bayt alır.
bigint Yes Yalnızca gerekli olan baytları kullanır. Örneğin, bir değer 1 bayt olarak depolanabilirse, depolama yalnızca 1 bayt alır.
decimal Yes Belirtilen hassasiyet ne olursa olsun yalnızca gerekli baytları kullanır. Örneğin, bir değer 3 bayt olarak depolanabilirse, depolama alanı yalnızca 3 bayt alır. Depolama ayak izi, vardecimal depolama biçimiyle tam olarak aynıdır.
Sayısal Yes Belirtilen hassasiyet ne olursa olsun yalnızca gerekli baytları kullanır. Örneğin, bir değer 3 bayt olarak depolanabilirse, depolama alanı yalnızca 3 bayt alır. Depolama ayak izi, vardecimal depolama biçimiyle tam olarak aynıdır.
bit Yes Meta veri yükü bunu 4 bit'e getirir.
küçük para Yes 4 baytlık bir tamsayı kullanarak tamsayı veri gösterimini kullanır. Para birimi değeri 10.000 ile çarpılır ve elde edilen tamsayı değeri ondalık ayırıcıdan sonraki basamaklar kaldırılarak depolanır. Bu tür, tamsayı türleri için buna benzer bir depolama iyileştirmesine sahiptir.
para Yes 8 baytlık bir tamsayı kullanarak tamsayı veri gösterimini kullanır. Para birimi değeri 10.000 ile çarpılır ve elde edilen tamsayı değeri ondalık ayırıcıdan sonraki basamaklar kaldırılarak depolanır. Bu tür smallmoney'den daha geniş bir aralığa sahiptir. Bu tür, tamsayı türleri için buna benzer bir depolama iyileştirmesine sahiptir.
float Yes Sıfır içeren en az önemli baytlar depolanmaz. float sıkıştırması çoğunlukla mantisteki kırılmaz değerler için geçerlidir.
Gerçek Yes Sıfır içeren en az önemli baytlar depolanmaz. gerçek sıkıştırma çoğunlukla mantisteki kırılmaz değerler için geçerlidir.
smalldatetime Hayı İki adet 2 baytlık tamsayı kullanarak tamsayı veri gösterimini kullanır ve bu tarihten bu yana 1900-01-01olan gün sayısıdır. Smalldatetime değerinin tarih bölümünde satır sıkıştırma avantajı yoktur.

Saat, gece yarısından bu yana dakika sayısıdır. 04:00'ı biraz geçen zaman değerleri ikinci bayt kullanmaya başlar.

Smalldatetime yalnızca bir tarihi (yaygın bir durum) temsil etmek için kullanılıyorsa, saat olur0.0. Sıkıştırma, zamanı satır sıkıştırması için en önemli bayt biçiminde depolayarak 2 bayt tasarruf sağlar.
datetime Yes İki adet 4 baytlık tamsayı kullanarak tamsayı veri gösterimini kullanır. Tamsayı değeri, temel tarihi 1900-01-01olan gün sayısını temsil eder. İlk 2 bayt yılı 2079 kadar temsil edebilir. Sıkıştırma, bu noktaya kadar her zaman 2 bayt tasarruf edebilir. Her tamsayı değeri 3,33 milisaniyeyi temsil eder. Sıkıştırma, ilk beş dakikada ilk 2 baytı tüketer ve 16:00'da dördüncü bayta ihtiyaç duyar. Bu nedenle sıkıştırma, 16:00'dan sonra yalnızca 1 bayt tasarruf edebilir. Tarih saat diğer tamsayılar gibi sıkıştırıldığında, sıkıştırma tarihe 2 bayt kaydeder.
date Hayı 3 bayt kullanarak tamsayı veri gösterimini kullanır. Bu, 0001-01-01 tarihini temsil eder. Çağdaş tarihler için satır sıkıştırma 3 bayt'ın tamamını kullanır. Bu, tasarruf sağlamaz.
time Hayı 3 - 6 bayt kullanarak tamsayı veri gösterimini kullanır. 0'dan 9'a kadar başlayan ve 3 ila 6 bayt alabilen çeşitli hassasiyetler vardır. Sıkıştırılmış alan aşağıdaki gibi kullanılır:

Kesinlik = 0. Byte = 3. Her tamsayı değeri bir saniyeyi temsil eder. Sıkıştırma, 2 bayt kullanarak 18:00'a kadar olan süreyi temsil edebilir, bu da potansiyel olarak 1 bayt tasarruf sağlayabilir.

Hassaslık = 1. Byte = 3. Her tamsayı değeri 1/10 saniyeyi temsil eder. Sıkıştırma, 02:00'ye kadar üçüncü bayt kullanır. Çok az tasarruf sağlar.

Doğruluk = 2. Byte = 3. Önceki örnekte olduğu gibi tasarruf sağlama olasılığı düşüktür.

Doğruluk = 3. Byte = 4. İlk 3 bayt 5AM tarafından alındığından, bu seçenek çok az verim sağlar.

Doğruluk = 4. Byte = 4. İlk 3 bayt ilk 27 saniyede alınır. Tasarruf beklenmiyor.

Duyarlık = 5, Bayt = 5. Beşinci bayt 12-öğlenden sonra kullanılacaktır.

Duyarlık = 6 ve 7, Bayt = 5. Tasarruf sağlamaz.

Duyarlık = 8, Bayt = 6. Altıncı bayt, 03:00'in ardından kullanılacaktır.

Satır sıkıştırma için depolamada değişiklik yoktur. Genel olarak, zaman veri türünün sıkıştırılmasından çok fazla tasarruf beklenemez.
datetime2 Yes 6 - 9 bayt kullanarak tamsayı veri gösterimini kullanır. İlk 4 bayt tarihi temsil eder. Belirtilen zaman hassasiyetinin belirlediği şekilde, alınan bayt sayısı değişiklik gösterir.

Tamsayı değeri, 31/12/9999 üst sınırıyla bu tarihten bu yana 0001-01-01 olan gün sayısını temsil eder. 2005 yılındaki bir tarihi temsil etmek için sıkıştırma 3 bayt alır.

Çünkü çeşitli zaman hassasiyetleri için 2 ila 4 bayt ayrıldığından, zaman tasarrufu sağlanamamaktadır. Bu nedenle, bir saniyelik zaman duyarlılığı için sıkıştırma işlemi, zaman bilgisini temsil etmek amacıyla 2 bayt kullanır ve ilk bayt 255 saniyeyi aştığında ikinci bayt devreye girer.
datetimeoffset Yes datetime2'ye benzer, ancak saat dilimi biçimi 2 bayttır (HH:mm).

Datetime2 gibi sıkıştırma da 2 bayt kaydedebilir.

Saat dilimi değerleri için mm değer çoğu durumda olabilir 0 . Bu nedenle, sıkıştırma muhtemelen 1 bayt tasarruf edebilir.

Satır sıkıştırma için depolamada değişiklik yoktur.
char Yes Sondaki doldurma karakterleri kaldırılır. Veritabanı Altyapısı, kullanılan harmanlamadan bağımsız olarak aynı doldurma karakterini ekler.
varchar Hayı Hiçbir etkisi yok.
text Hayı Hiçbir etkisi yok.
nchar Evet 1 Sondaki doldurma karakterleri kaldırılır. Veritabanı Altyapısı, kullanılan harmanlamadan bağımsız olarak aynı doldurma karakterini ekler.
nvarchar Hayır 1 Hiçbir etkisi yok.
ntext Hayı Hiçbir etkisi yok.
binary Yes Sondaki sıfırlar kaldırılır.
varbinary Hayı Hiçbir etkisi yok.
image Hayı Hiçbir etkisi yok.
imleç Hayı Hiçbir etkisi yok.
Zaman damgası / rowversion Yes 8 bayt kullanarak tamsayı veri gösterimini kullanır. Her veritabanı için tutulan bir zaman damgası sayacı vardır ve değeri 0'dan başlar. Bu, diğer herhangi bir tamsayı değeri gibi sıkıştırılabilir.
sql_variant Hayı Hiçbir etkisi yok.
uniqueidentifier Hayı Hiçbir etkisi yok.
table Hayı Hiçbir etkisi yok.
xml 2 Yok Hiçbir etkisi yok.
Kullanıcı tanımlı türler Hayı Bu, dahili olarak varbinary olarak temsil edilir.
FILESTREAM Hayı Bu, dahili olarak varbinary olarak temsil edilir.

1 Unicode sıkıştırma, sabit uzunlukta nchar ve nvarchar veri türlerini destekler. Satır dışında veya nvarchar(max) sütunlarında depolanan veri değerleri sıkıştırılamaz. Satır içinde depolanmış olsa bile nvarchar(max) verilerinde Unicode sıkıştırma desteklenmez.

2 Veri sıkıştırma etkinleştirilirken satır dışı veriler sıkıştırılmıyor. Örneğin, 8.060 bayttan büyük bir XML kaydı, sıkıştırılmış olmayan satır dışı sayfalar kullanır.