Seyrek sütunları kullanma

Seyrek sütunları null değerler için en iyi duruma getirilmiş bir depolama alanı olan normal sütun var.Seyrek sütun nonnull değerleri almak için boş alan gereksinimleri null değerler, daha fazla yükü azaltır.Kaydedilmiş alan en az yüzde 20'si için yüzde 40, seyrek sütun kullanmayı düşünün.Seyrek sütunlar ve sütun kümelerini tanımlanan kullanarakCREATE tablo veya ALTER tablo deyimleri.

Seyrek sütun dizinleri filtre ve sütun kümeleri kullanılabilir:

  • Sütun kümeleri

    INSERT, UPDATE ve DELETE deyimleri adıyla seyrek sütun başvurusu.Ancak, ayrıca görüntülemek ve tek bir XML sütun birleştirilen tüm seyrek sütunları bir tablo ile çalışma.Bu sütuna bir sütun adı verilen küme.Sütun kümeleri hakkında daha fazla bilgi için bkz:Sütun kümesi'ni kullanma.

  • Filtre uygulanmış dizinler

    Seyrek sütunlar null değerli çok sayıda satır olduğundan, bunlar süzülmüş dizinler için özellikle uygundur.Filtre uygulanmış bir dizin seyrek bir sütunundaki değerleri giriş, yalnızca satırları dizin oluşturabilirsiniz.Bu, daha küçük ve daha verimli bir dizin oluşturur.Daha fazla bilgi için bkz: Süzülmüş dizin tasarım yönergeleri.

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

Seyrek sütun özellikleri

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

  • The SQL Server Database Engine 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 boş bir satır için tablo, hiçbir depolama değerleri gerektirir.

  • Katalog görünümleri seyrek sütunları olan tablo için genel bir tablo aynıdır.Sys.columns Katalog görünümü, tablodaki her sütun için bir satır içerir ve bir sütun içeren küme biri tanımlanmış olması durumunda.

  • The COLUMNS_UPDATED işlev döndüren birvarbinarysırasında güncelleştirilmiş tüm sütunları göstermek için değeri DML eylem.COLUMNS_UPDATED işlev tarafından döndürülen bir bit aşağıdaki gibidir:

    • Seyrek sütunu açıkça güncelleştirildiğinde, ilgili seyrek sütunu 1 değerine ayarlanmıştır ve sütun kümesi için bit 1 olarak ayarlandığında bitini.

    • Bir sütun kümesi açıkça güncelleştirildiğinde, sütun kümesi için bit 1 olarak küme ve bu tablodaki tüm seyrek sütunlar için bit 1 olarak küme.

    • 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ümesi'ni kullanma.

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

geography

text

geometry

timestamp

image

user-defined data types

ntext

Alan tasarrufu veri türüne göre tahmini

Seyrek sütun SPARSE olarak işaretlenmemiş aynı veriler için gerekli alanı nonnull değerleri için daha fazla depolama alanı gerektirir.Aşağıdaki tabloda, her veri türü alanı kullanımını gösterir.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%

Precision 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)

Usedecimaltürü olarak koruyucu bir tahmin.

Veri Dependent–Length veri türleri

Veri türü

Nonsparse bayt

Seyrek bayt

null yüzdesi

sql_variant

Temel veri türüne sahip 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%

* Uzunluğu, veri için ortalama türü ve 2 veya 4 bayt eşittir.

Seyrek sütunları kullanma sınırlamaları

Seyrek sütunları herhangi biri olabilirSQL Serververileri yazın ve aşağıdaki kısıtlamalar ile başka herhangi bir sütun gibi davranır:

  • Seyrek bir sütun null olmalı ve ROWGUIDCOL veya IDENTITY özelliklerinin olamaz.Seyrek sütun, aşağıdaki veri türlerinden olamaz: text,ntext,image,timestampkullanıcı tanımlı veri türügeometry, orgeography; veya FILESTREAM öznitelik.

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

  • Seyrek bir sütun için bir kural bağlanamaz.

  • Seyrek bir sütunda hesaplanan sütun içerebilir, ancak hesaplanan sütun SPARSE işaretlenemez.

  • Seyrek sütun kümelenmiş dizin veya bir benzersiz birincil anahtar dizini olamaz.Ancak, seyrek sütunlarda tanımlanan kalıcı ve nonpersisted hesaplanan sütunları kümelenmiş anahtar parçası olabilir.

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

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

  • Bir sütun nonsparse veya nonsparse için seyrek seyrek değiştirmek için sütun depolama biçimini değiştirme gerektirir.SQL Server veritabanı motoru, bu değişikliği yapmak için aşağıdaki yordamı kullanır:

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

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

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

    4. Oluşturur tablo eski sütun tarafından kullanılan alanı açmak için.

    Not

    Satırdaki verilerin boyutu izin verilen en büyük satır boyutunu aşarsa, adım 2 başarısız olabilir.Bu boyut, eski sütunda depolanan veri ve yeni bir sütunda depolanan güncelleştirilmiş verileri içerir.Bu, seyrek tüm 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.Uygun tüm sütunların satır kapalı itilmiş bile bu hata oluşabilir.Daha fazla bilgi için bkz: Satır-8 KB Exceeding veri taşması.

  • Nonsparse sütun seyrek bir sütunu değiştirdiğinizde, seyrek sütun nonnull değerlerini daha fazla alan tüketir.Bir satır satır boyut sınırına yakın olduğunda, işlem başarısız olabilir.

SQL Server, seyrek sütunlar destek teknolojileri

Nasıl seyrek sütunları bu bölümde açıklanmıştır aşağıdaki desteklenenSQL Serverteknolojileri:

  • İşlemsel kopyalama

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

    The SPARSE çoğaltılması öznitelik kullanarak belirlediğiniz bir şema seçeneği tarafından belirlenensp_addarticleMakale özellikleri iletişim kutusunu kullanarak SQL Server Management Studio.Önceki sürümleriSQL Serverdesteklemez seyrek sütunlar.Önceki bir sürümüne veri çoğaltma SPARSE özniteliği olmayan çoğaltılacak belirtin.

    tablo Yayımlanan s, yeni bir seyrek sütun ekleyemez bir tablo veya varolan bir sütunu seyrek özelliğini değiştirin.Bu tür bir işlemi gerekiyorsa, doğrudan ve yayın yeniden oluşturun.

  • Birleştirme çoğaltma

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

  • Değişiklik izleme

    Değişiklik izlemeyi destekleyen seyrek sütunlar ve sütun ayarlar.Bir sütun, küme güncelleştirilen bir tabloda değişiklik izleme bu güncelleştirme olarak tüm satıra değerlendirir.Ayrıntılı değişiklik izleme tam elde etmek için sağlanan küme sütunu boyunca güncelleştirilen seyrek sütunların küme güncelleştirme işlemi.Seyrek sütunları arasında bir DML deyimini açıkça güncelleştirdiyseniz, değişiklik izlemeyi bunları normal çalışır ve tam olarak belirleyebilir küme değişen sütun.

  • Veri yakalamayı değiştirme

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

Örnekler

Bu örnekte, belgeyi içeren sütunları olan bir genel grupDocIDveTitle.Ürün grubu istediği birProductionSpecificationveProductionLocationsütun için tüm üretim belgeleri.Pazarlama Grubu istediği birMarketingSurveyGroupsütun için pazarlama belgeleri.Bu örnek kod, seyrek sütunları kullanır, iki tabloya ekler ve sonra 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_ON seçenek isteğe bağlı küme.

USE AdventureWorks
GO

CREATE TABLE 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 DocumentStore(DocID, Title, ProductionSpecification, ProductionLocation)
VALUES (1, 'Tire Spec 1', 'AXZZ217', 27)
GO

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

Gelen tüm sütunları seçmek için tablo bir sıradan bir sonuç kümesi verir.

SELECT * FROM DocumentStore ;

Here is the result set.

BelgeKimliği başlık ProductionSpecification ProductionLocation MarketingSurveyGroup

1 Özel 1 AXZZ217 lastiği 27 NULL

2 Anket 2142 NULL NULL men 25-35

Aşağıdaki sorguyu gösterilen ilgi, yalnızca sütun döndüren bir sütun listesi kullanmak istedikleri üretim bölümü pazarlama verileri ilgileniyor çünkü.

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

Here is the result set.

BelgeKimliği başlık ProductionSpecification ProductionLocation

1 Özel 1 AXZZ217 lastiği 27

Değişiklik Geçmişi

Güncelleştirilmiş içerik

Bağımlı veri türleri alanında listelenen veri boyutu sabit tablo.