Seyrek sütunlar kullanma

Seyrek sütunları null değerler için en iyi duruma getirilmiş bir depolama alanı olan sıradan sütunları olan.Seyrek sütunlar null olmayan değerler almak için null değerleri at maliyeti daha fazla yük alanı gereksinimlerini azaltır.Kaydedilen alanı en az yüzde 20'si için yüzde 40 olduğunda seyrek sütun kullanmayı düşünün.Seyrek sütunlar ve sütun kümelerini tanımlanan kullanarak create table veya alter table deyimleri.

Seyrek sütunlar, sütun kümeleriyle kullanılan ve filtre uygulanmış dizinler:

  • Sütun kümelerini

    INSERT, update ve delete deyimlerini adıyla seyrek sütunları başvuru.Ancak, aynı zamanda görüntüleyebilir ve tek bir xml sütun birleştirilmiş tüm seyrek sütunları bir tablo ile çalışma.Bu sütun, sütun küme olarak adlandırılır.Sütun kümeleri hakkında daha fazla bilgi için bkz: Sütun kümelerini kullanma.

  • Filtre uygulanmış dizinler

    Seyrek sütunlar null değerli birçok satır olduğundan, bunlar için filtre uygulanmış dizinler özellikle uygundur.Doldurulan değerlere satırlar seyrek sütun filtre uygulanmış bir dizin dizin oluşturabilirsiniz.Bu, daha küçük ve daha verimli bir dizin oluşturur.Daha fazla bilgi için bkz: Filtre uygulanmış dizin tasarım yönergeleri.

Seyrek sütunlar ve filtre uygulanmış dizinler etkinleştirme uygulamaları gibi Windows SharePoint Servicesiçin verimli bir şekilde saklamak ve çok sayıda kullanıcı tanımlı özellikler kullanarak erişim SQL Server.

Seyrek sütun özellikleri

Seyrek sütunlar aşağıdaki özelliklere sahiptir:

  • The SQL Server Veritabanı Altyapısı uses the SPARSE keyword in a column definition to optimize the storage of values in that column.Bu nedenle, sütun değeri olduğunda null herhangi bir satır için tablo, hiçbir depolama değeri gerektirir.

  • Katalog görünümleri, seyrek sütunları olan tablo için tipik bir tablo aynıdır.The sys.columns catalog view contains a row for each column in the table and includes a column set if one is defined.

  • Seyrek sütunlar yerine depolama katmanı, mantıksal bir özellik olan tablo.Bu nedenle select…INTO deyim seyrek sütun özellik yeni bir kopyalamaz tablo.

  • columns_updated işlev döndüren bir varbinary değer sırasında güncelleştirilen tüm sütunları göstermek içinbir dml eylem. columns_updated işlev tarafından döndürülen bit olarak aşağıdaki gibidir:

    • Seyrek sütun açıkça güncelleştirildiğinde, buna karşılık gelen için seyrek sütunu 1 olarak ayarlayın ve sütun küme bit 1 olarak küme bit.

    • Sütun küme açıkça güncelleştirildiğinde sütun küme bit 1 ve tüm seyrek sütunlar için BITS küme tablo 1 olarak ayarlayın.

    • Ekleme işlemleri için tüm bit 1 olarak küme.

    Sütun kümeleri hakkında daha fazla bilgi için bkz: Sütun kümelerini kullanma.

Aşağıdaki veri türleri sparse belirtilemez:

geography

text

geometry

timestamp

image

user-defined data types

ntext

Tasarruf veri türüne göre tahmini

Seyrek sütun sparse işaretlenmiş özdeş veriler için gerekli alanı null olmayan değerler için daha fazla depolama alanı gerektirir.Aşağıdaki tablolarda her veri türü alanı kullanımı gösterilmektedir.The NULL percentage column indicates what percent of the data must be NULL for a net space savings of 40 percent.

Sabit uzunluklu veri türleri

Veri türü

Nonsparse bayt

Seyrek bayt

null yüzdesi

bit

0.125

4.125

98%

tinyint

1

5

86%

smallint

2

6

76%

int

4

8

64%

bigint

8

12

52%

real

4

8

64%

float

8

12

52%

smallmoney

4

8

64%

money

8

12

52%

smalldatetime

4

8

64%

datetime

8

12

52%

uniqueidentifier

16

20

43%

date

3

7

69%

Duyarlık Dependent–Length veri türleri

Veri türü

Nonsparse bayt

Seyrek bayt

null yüzdesi

datetime2(0)

6

10

57%

datetime2(7)

8

12

52%

time(0)

3

7

69%

time(7)

5

9

60%

datetimetoffset(0)

8

12

52%

datetimetoffset (7)

10

14

49%

decimal/numeric(1,s)

5

9

60%

decimal/numeric(38,s)

17

21

42%

vardecimal(p,s)

Use decimal türü olarak koruyucu bir tahmin.

Veri Dependent–Length veri türleri

Veri türü

Nonsparse bayt

Seyrek bayt

null yüzdesi

sql_variant

Temel alınan veri türüne bağlı olarak değişir

varchar veya char

2*

4*

60%

nvarchar veya nchar

2*

4*+

60%

varbinary veya binary

2*

4*

60%

xml

2*

4*

60%

hierarchyid

2*

4*

60%

* Türü artı 2 veya 4 bayt eşit içerdiği veri için ortalama uzunluğudur.

Seyrek sütunlar kullanma sınırlamaları

Seyrek sütuns herhangi biri olabilir SQL Server verileri yazın ve diğer aygıtlarla gibi davranmasına sütun aşağıdaki kısıtlamalarla:

  • Seyrek sütun null olabilecek ve ROWGUIDCOL ya da kimlik özellikleri sahip olamaz.

  • Seyrek sütun aşağıdaki veri türlerinden olamaz: text, ntext, image, timestamp, user-defined data type, geometry, or geography; ya da bir FILESTREAM öznitelik.

  • Seyrek sütun varsayılan değeri olamaz.

  • Bir kural seyrek sütun bağlanamaz.

  • hesaplanan sütun seyrek sütun içerebilir, ancak hesaplanan sütun sparse işaretlenemez.

  • Seyrek sütun kümelenmiş dizin veya benzersiz bir parçası olamaz birincil anahtar dizin.Ancak, seyrek sütunlar üzerinde tanımlı hem kalıcı hem de nonpersisted hesaplanmış sütunları Kümelenmiş anahtar bir parçası olabilir.

  • Seyrek sütun kümelenmiş dizin veya yığın bölüm anahtar olarak kullanılamaz.Ancak, seyrek sütun kümelenmemiş dizin bölümü anahtar olarak kullanılır.

  • Seyrek sütun tablo değişkenlerini ve tablo değerli parametreleri kullanılan bir kullanıcı tanımlı tablo türü bir parçası olamaz.

  • Seyrek sütunlar veri sıkıştırması ile uyumlu değildir.Bu nedenle sıkıştırılmış tablolar için seyrek sütunlar eklenemez ya da seyrek sütunları içeren tüm tablolar birleştirilebilir.

  • Bir sütun nonsparse veya nonsparse için seyrek seyrek değiştirme sütun depolama biçimini değiştirme gerektirir.The SQL Server Veritabanı Altyapısı uses the following procedure to accomplish this change:

    1. Yeni bir sütun ekler tablo yeni depolama boyutu ve biçimi.

    2. Her satır için tablo, güncelleştirmeleri ve yeni bir sütun için eski sütunundaki değeri depolanmış kopyaları.

    3. Eski sütun tablo şemadan kaldırır.

    4. Eski sütun tarafından kullanılan alanının tümünü geri kazanmak için tablo yeniden oluşturur.

    Not

    Adım 2 satırda verinin boyutunu izin verilen en büyük satır boyutunu aşarsa başarısız olabilir.Bu boyut eski saklanan verinin boyutunu içerir sütun ve yeni güncel veriye sütun.Bu seyrek sütunlar içeren tablolar için 8060 baytı veya seyrek sütunları içeren tablolar için 8018 bayt sınırıdır.Tüm uygun sütunları satır kapalı itildiği olsa bile, bu hata oluşabilir.Daha fazla bilgi için bkz: 8 kb aşan satır taşma veri.

  • Nonsparse bir sütun seyrek sütun için değiştirdiğinizde, seyrek sütun null olmayan değerler için daha fazla yer tüketir.Bir satır satır boyut sınırına yakın olduğunda, işlem başarısız olabilir.

Seyrek sütunlar desteği sql Server teknolojileri

Bu bölüm nasıl seyrek sütunları açıklar aşağıdaki desteklenen SQL Server teknolojileri:

  • İşlemçoğaltma

    Seyrek sütunları işlem çoğaltma destekler, ancak seyrek sütunları içeren kullanılabilir sütun kümelerini desteklemez.Sütun kümeleri hakkında daha fazla bilgi için bkz: Sütun kümelerini kullanma.

    çoğaltma sparse öznitelik kullanılarak belirtilen bir şema seçeneği belirlenir sp_addarticle veya kullanarak Makale özelliklerini iletişim kutusunda SQL Server Management Studio.Önceki sürümlerinde SQL Server desteklemez seyrek sütunları.Önceki bir sürüm için verileri çoğaltmak sparse öznitelik çoğaltılır belirtin.

    İçin tabloyayımlanan s için yeni seyrek sütun ekleyemiyor bir tablo veya varolan bir sütun seyrek özelliğini değiştirin.Bu tür bir işlem yapılması gerekirse bırakın ve yayın yeniden oluşturun.

  • Çoğaltma Birleştir

    Birleştirme çoğaltma seyrek sütun veya sütun kümelerini desteklemez.

  • Değişiklik izleme

    Değişiklik izlemeyi destekler seyrek sütunlar ve sütun ayarlar.Ne zaman bir sütun küme güncelleştirilir bir tablo, değişiklik izleme değerlendirir bu güncelleştirme olarak tüm satır için.Ayrıntılı değişiklik izleme sütun küme güncelleştirme işlemi güncelleştirilen seyrek sütunları tam kümesini elde etmek için sağlanmıştır.Seyrek sütunları açıkça bir dml deyim ile güncelleştirilir, değişiklik izlemeyi bunları olağan şekilde çalışır ve tam ayırt edebilirsiniz küme değişen sütun.

  • Değişiklik veri yakalama

    Seyrek sütunları değiştir veri yakalama destekler, ancak sütun kümelerini desteklemez.

  • sütun sparse özellik Tablo kopyalandığında korunmaz.

Örnekler

Bu örnekte, bir belge tablo sütunları olan ortak içerir DocID ve Title.Üretim grubu istediği bir ProductionSpecification ve ProductionLocation sütun için tüm üretim belgeleri.Pazarlama grubu istediği bir MarketingSurveyGroup sütun için pazarlama belgeleri.Bu örnek koda seyrek sütunları kullanan iki satır tabloya ekler ve ardından veri tablosundan seçer bir tablo oluşturur.

Not

Bu tablo görüntülemek ve okunmasını kolaylaştırmak için yalnızca beş sütun vardır.Seyrek sütunlar NULL olarak bildirmek ANSI_NULL_DFLT_OFF seçenek ise isteğe bağlı küme.

USE AdventureWorks2008R2;
GO

CREATE TABLE dbo.DocumentStore
(DocID int PRIMARY KEY,
Title varchar(200) NOT NULL,
ProductionSpecification varchar(20) SPARSE NULL,
ProductionLocation smallint SPARSE NULL,
MarketingSurveyGroup varchar(20) SPARSE NULL ) ;
GO

INSERT dbo.DocumentStore(DocID, Title, ProductionSpecification, ProductionLocation)
VALUES (1, 'Tire Spec 1', 'AXZZ217', 27);
GO

INSERT dbo.DocumentStore(DocID, Title, MarketingSurveyGroup)
VALUES (2, 'Survey 2142', 'Men 25 - 35');
GO

Tüm sütunlar arasından seçerek tablo sıradan bir sonuç küme döndürür.

SELECT DocID, Title, ProductionSpecification, ProductionLocation, MarketingSurveyGroup
FROM DocumentStore ;

Sonuç kümesi buradadır.

DocID  Title        ProductionSpecification  ProductionLocation  MarketingSurveyGroup

------ ------------ ----------------------- ------------------- ---------------------

1      Tire Spec 1  AXZZ217                  27                  NULL

2      Survey 2142  NULL                     NULL                Men 25-35

Üretim departmanı pazarlama verileri ilgileniyor çünkü bunlar, vade farkı yalnızca sütunları döndüren bir sütun listesi aşağıdaki sorgu gösterildiği gibi kullanmak istiyorsunuz.

SELECT DocID, Title, ProductionSpecification, ProductionLocation 
FROM DocumentStore 
WHERE ProductionSpecification IS NOT NULL ;

Sonuç kümesi buradadır.

DocID  Title        ProductionSpecification  ProductionLocation

----- ------------ ----------------------- ------------------

1      Tire Spec 1  AXZZ217                  27