Using Sparse Columns

Kolumny rozrzedzone są zwykłe kolumny, które mają zoptymalizowane składowania, w odniesieniu wartości null.Rzadkie kolumn zmniejszyć wymagania dotyczące miejsca dla wartości null jest związany z kilku zadań w celu pobrania wartości niepustych.Należy rozważyć użycie kolumny rozrzedzone po co najmniej 20 do 40 procent miejsca zapisania.Rzadkie kolumn i zestawy kolumna są zdefiniowane za pomocą TWORZENIE tabela or ALTER tabela instrukcji.

Rzadkie kolumn można używać z zestawami kolumna i przefiltrowane indeksów:

  • kolumna Ustawia

    INSERT UPDATE, i DELETE instrukcji mogą odwoływać się do kolumn rozrzedzone według nazwy.Jednak można również wyświetlać i pracować z wszystkich rozrzedzone kolumna tabela, które są łączone w pojedynczą kolumna XML.Ta kolumna nosi nazwę zestaw kolumn.Aby uzyskać więcej informacji na temat kolumna zestawów, zobacz Korzystanie z zestawów kolumna.

  • Filtrowane indeksów

    Ponieważ rozrzedzone kolumn mają wiele wierszy wartości null, są one szczególnie odpowiednia dla filtrowanych indeksów.Filtrowane indeksu na rozrzedzone kolumna można indeksować tylko te wiersze, które zostały wypełnione wartościami.Spowoduje to utworzenie indeksu mniejsze i bardziej wydajne.Aby uzyskać więcej informacji zobaczWskazówki dotyczące projektowania indeks filtrowane.

Rzadkie kolumny i filtrowane indeksów włączania aplikacji, takich jak Windows SharePoint Services, aby efektywne przechowywanie i uzyskiwanie dostępu do dużej liczby właściwości zdefiniowane przez użytkownika przy użyciu SQL Server 2008.

Właściwości kolumny odstępem

Rzadkie kolumny mają następujące cechy:

  • The SQL Server Database Engine uses the SPARSE keyword in a kolumna definition to optimize the storage of values in that kolumna. W związku z tym kiedy wartość kolumna jest wartość NULL dla każdego wiersza w tabela, wartości wymagają nie pamięci masowej.

  • Widoki wykazu dla tabela zawierającej kolumny rozrzedzone są takie same, jak w przypadku typowego tabela.Wyświetlanie katalogu sys.columns zawiera wiersz dla każdej kolumna w tabela i zawiera zestaw kolumn Jeśli jedna jest zdefiniowana.

  • Zwraca wartość funkcja COLUMNS_UPDATED varbinary wartość, aby wskazać wszystkie kolumny, które zostały zaktualizowane w trakcie akcja DML. Bity, które są zwracane przez funkcja COLUMNS_UPDATED są następujące:

    • kolumna rozrzedzona po zaktualizowaniu jawnie, odpowiadający mu bit dla kolumna rozrzedzona jest równa 1 i bit niszczący dla zestaw kolumny jest równa 1.

    • Zestaw kolumn po zaktualizowaniu jawnie, bit dla zestawu kolumn zostanie ustawiony na wartość 1, a bity we wszystkich kolumnach sparse w tej tabela są ustawione na 1.

    • W przypadku operacji wstawiania wszystkie bity są ustawione na 1.

    Aby uzyskać więcej informacji na temat zestawów kolumn zobacz Korzystanie z zestawów kolumna.

Następujące typy danych nie może być określona jako SPARSE:

geography

text

geometry

timestamp

image

user-defined data types

ntext

Szacowane oszczędności miejsca przez typ danych

Rzadkie kolumny wymaga więcej miejsca na przechowywanie niepustych wartości niż miejsce wymagane dla identycznych dane, które nie jest oznaczony jako SPARSE.W poniższych tabelach przedstawiono sposób użycia miejsca dla każdego typu danych.The NULL Percentage kolumna indicates what percent of the data must be NULL for a net space savings of 40 percent.

Stała długość typów danych

Typ danych

Nonsparse bajtów

Rzadkie bajtów

Procentowa wartość NULL

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%

Typy danych Dependent–Length precyzji

Typ danych

Nonsparse bajtów

Rzadkie bajtów

Procentowa wartość NULL

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)

Użycie decimal należy wpisać jako prezentacji szacowania.

Typy danych Dependent–Length danych

Typ danych

Nonsparse bajtów

Rzadkie bajtów

Procentowa wartość NULL

sql_variant

Może być różna w zależności od typu danych źródłowych

varchar lub char

2*

4*

60%

nvarchar lub nchar

2*

4*+

60%

varbinary lub binary

2*

4*

60%

xml

2*

4*

60%

hierarchyid

2*

4*

60%

* Długość jest równa średniej z danych zawartych w rodzaju plus 2 lub 4 bajty.

Ograniczeń związanych z korzystaniem z odstępem kolumny

kolumna rozrzedzania może być żadnej SQL Server Wpisz dane, a zachowują się podobnie jak inne kolumna z następującymi ograniczeniami:

  • kolumna rozrzedzona muszą być pustych i nie może mieć właściwości ROWGUIDCOL lub IDENTITY.kolumna rozrzedzona nie mogą być następujące typy danych: text, ntext, image, timestamp, typ danych zdefiniowany przez użytkownika geometry, lub geography; lub mają atrybut FILESTREAM.

  • kolumna rozrzedzona nie może mieć wartość domyślną.

  • kolumna rozrzedzona nie można powiązać do reguły.

  • Mimo, że kolumna obliczana może zawierać rozrzedzone kolumna, kolumna obliczana nie można oznaczyć jako SPARSE.

  • kolumna rozrzedzona nie może być częścią indeks klastrowany lub unikatowy indeks klucz podstawowy.Jednak trwałe i nonpersisted kolumny obliczane zdefiniowane w kolumnach rozrzedzania może być częścią klucz klastrowanego.

  • kolumna rozrzedzona nie można użyć jako klucz partycji indeks klastrowany lub sterty.Jednak kolumna rozrzedzona można użyć jako klucz partycji indeks nieklastrowany.

  • kolumna rozrzedzona nie może być częścią typu tabela zdefiniowaną przez użytkownika, które są używane w tabela, zmiennych i parametrów wycenione tabela.

  • Zmiana kolumna z rozrzedzone nonsparse lub nonsparse do rozrzedzone konieczna jest zmiana formatu przechowywania kolumna.Aparat bazy danych programu SQL Server korzysta z poniższej procedury do wykonywania tej zmiany:

    1. Dodaje nową kolumna do tabela w nowy rozmiar i format.

    2. Dla każdego wiersza w tabela, aktualizacje i kopie wartości przechowywane kolumna starej do nowej kolumna.

    3. Stary kolumna powoduje usunięcie schematu tabela.

    4. Buduje ponownie odzyskać zajmowane przez stary kolumna w tabela.

    Uwaga

    Krok 2 może zakończyć się niepowodzeniem, gdy rozmiar danych w wierszu przekracza rozmiar maksymalny dopuszczalny wiersza.Rozmiar ten obejmuje rozmiaru danych przechowywanych w starym kolumna i zaktualizowane dane przechowywane w nowej kolumnie.Limit ten jest 8060 bajtów dla tabel, które nie zawierają żadnych kolumn rozrzedzony lub 8018 bajtów dla tabel, które zawiera rozrzedzone kolumn.Ten błąd może wystąpić, nawet jeżeli wszystkie kolumny uprawnionych mają została przesunięta poza wiersza.Aby uzyskać więcej informacji zobaczRow-Overflow Data Exceeding 8 KB.

  • Po zmodyfikowaniu nonsparse kolumny do kolumny rozrzedzone kolumna rozrzedzona zużywa więcej miejsca dla wartości niepustych.Jeżeli wiersz jest zbliżony do wiersza maksymalny limit rozmiaru, operacja może zakończyć się niepowodzeniem.

Technologie serwera SQL Z pomocy technicznej odstępem kolumny

W tej sekcji opisano, jak rozrzedzone kolumn są obsługiwane w następujących SQL Server technologie:

  • replikacja transakcyjnej

    replikacja transakcyjnej obsługuje rozrzedzone kolumna s, ale nie obsługuje kolumna zestawy, które mogą być używane z rozrzedzone kolumna s.Aby uzyskać więcej informacji na temat kolumna zestawów, zobacz Korzystanie z zestawów kolumna.

    Replikacja ROZRZEDZANIA atrybut jest określana przez opcję schematu, która jest określona przy użyciu sp_addarticle lub przy użyciu Właściwości artykuł pole dialogowe SQL Server Management Studio. We wcześniejszych wersjach SQL Server nie obsługują rozrzedzone kolumn. W przypadku danych musi być replikowane na starszej wersja, należy określić, że ROZRZEDZANIA atrybut nie powinien być replikowany.

    Dla tabel, które zostały opublikowane można dodać wszelkie rozrzedzone kolumna do tabela lub zmienić właściwość rozrzedzone istniejącej kolumna.Jeśli wymagany jest taką operację, należy usunąć i odtworzenia publikacja.

  • Scalanie replikacja

    replikacja łączenia nie obsługuje rozrzedzone kolumna lub zestawy kolumn.

  • IsAnsiNullsEnabled

    Śledzenie zmian obsługuje rozrzedzone kolumna s i kolumna ustawia.Po zaktualizowaniu zestaw kolumn w tabela śledzenia zmian traktuje to jako aktualizacja cały wiersz.Nie szczegółowe śledzenie zmian jest udostępniany uzyskać dokładnie zestaw rozrzedzone kolumna, które są aktualizowane za pomocą operacji aktualizowania zestaw kolumn.Kolumny rozrzedzone są jawnie zaktualizowany za pomocą instrukcja DML, śledzenia zmian na nich będzie działać zwykle i można określić dokładny zestaw kolumn zmienione.

  • Zmienianie przechwytywania danych

    Przechwytywanie danych zmiana obsługuje rozrzedzone kolumn, ale nie obsługuje zestawów kolumna.

Przykłady

W tym przykładzie tabela dokument zawiera wspólny zestaw, zawierającą kolumny DocID i Title. Grupy produkcji chce ProductionSpecification i ProductionLocation kolumna dla wszystkich dokumentów produkcyjnych. Grupa marketingu chce MarketingSurveyGroup kolumna dla dokumentów sprzedaży. Kod w tym przykładzie jest tworzona tabela rozrzedzone kolumn, wstawia dwa wiersze w tabeli, a następnie zaznaczyć dane z tabeli.

Uwaga

Ta tabela ma tylko pięć kolumn, aby ułatwić wyświetlanie i przeczytać.Zadeklarowanie rozrzedzone kolumn, które mają być nullable jest opcjonalna, jeśli ustawiono opcję ANSI_NULL_DFLT_ON.

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

Aby zaznaczyć wszystkie kolumny z tabela zwraca zestaw wyników zwykłych.

SELECT * FROM DocumentStore ;

Here is the result set.

Tytuł DocID ProductionLocation MarketingSurveyGroup ProductionSpecification

1 Opona Spec 1 AXZZ217 27 NULL

2 Ankiety 2142 NULL NULL celu 25-35

Ponieważ dział produkcji nie jest zainteresowana danych marketingowych, których chcą używać listy kolumna, która zwraca kolumna tylko zainteresowania, jak pokazano w następującej kwerendzie.

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

Here is the result set.

Tytuł DocID ProductionSpecification ProductionLocation

1 Opona Spec 1 AXZZ217 27

Historia zmian

Microsoft Learning

Stałe rozmiary dane, które są wymienione w tabela typów danych zależnych.