Udostępnij za pośrednictwem


Trwa szacowanie rozmiaru indeks nieklastrowany

Wykonaj następujące kroki, aby oszacować ilość miejsca, które są wymagane do przechowywania indeks nieklastrowany:

  1. Obliczanie zmienne, których można używać w krokach 2 i 3.

  2. Oblicz ilość miejsca używanego do przechowywania informacji indeks nieklastrowany indeks poziomu typu poziom liścia.

  3. Oblicz ilość miejsca używanego do przechowywania informacji o indeksie w poziomie elementu członkowskiego typu nie liść indeks nieklastrowany.

  4. Suma obliczonych wartości.

Krok 1.Obliczanie zmienne do użycia w kroki 2 i 3

Poniższe kroki służy do obliczania zmiennych, które są używane do oszacowania ilości miejsca wymaganego do przechowywania wyższych poziomów wskaźnika.

  1. Określ liczbę wierszy, które będą znajdować się w tabela:

    Num_Rows = Liczba wierszy w tabela

  2. Określ liczbę kolumn o stałej długości i o zmiennej długości w indeksie klucz i obliczyć miejsca wymaganego do ich przechowywania:

    Kolumny klucz indeksu można dołączyć kolumny o stałej długości i o zmiennej długości.Aby oszacować rozmiar wierszy wewnętrznego poziom indeksu, należy obliczyć miejsca zajmuje każdej z tych grup kolumn w wierszu indeksu.Rozmiar kolumna zależy od specyfikacji typ i długość danych.Aby uzyskać więcej informacji zobaczTypy danych (aparat bazy danych).

    Num_Key_Cols = Całkowita liczba kolumn klucz (o stałej długości i o zmiennej długości)

    Fixed_Key_Size = bajt całkowity rozmiar wszystkich kolumn klucz o stałej długości

    Num_Variable_Key_Cols = Liczba kolumn klucz o zmiennej długości

    Max_Var_Key_Size = rozmiar w bajtach maksymalny wszystkich kolumn klucz o zmiennej długości

  3. Konto dla Lokalizator wiersza danych, które są wymagane, jeśli indeks nieunikatowy:

    W przypadku nieunikatowy indeks nieklastrowany Lokalizator wiersz danych jest połączona z nieklastrowany indeks klucz do uzyskiwania wartości klucz unikatowy dla każdego wiersza.

    Jeśli indeks nieklastrowany znajduje się nad sterty, lokalizator wiersz danych jest sterty RID.Jest to rozmiar 8 bajtów.

    Num_Key_Cols = Num_Key_Cols + 1

    Num_Variable_Key_Cols = Num_Variable_Key_Cols + 1

    Max_Var_Key_Size = Max_Var_Key_Size + 8

    Jeśli indeks nieklastrowany znajduje się w indeksie klastrowanym, lokalizator wiersz danych jest klastrowanie klucz.Te kolumny są kolumny, które muszą być połączone z kluczem indeks nieklastrowany klastrowanie klucz, który nie jest już obecny zestaw kolumn klucza indeks nieklastrowany.

    Num_Key_Cols = Num_Key_Cols + numer kolumny klucz nie znajduje się zestaw klastrowania indeks nieklastrowany klucz kolumn (+ 1), jeśli jest nieunikatowy indeks klastrowany

    Fixed_Key_Size = Fixed_Key_Size + rozmiar w bajtach całkowity o stałej długości klastrowanie klucz kolumn zestaw nie indeks nieklastrowany klucz kolumn

    Num_Variable_Key_Cols = Num_Variable_Key_Cols + numer o zmiennej długości, klastrowanie klucz kolumn zestaw nie indeks nieklastrowany klucz kolumn (+ 1), jeśli jest nieunikatowy indeks klastrowany

    Max_Var_Key_Size = Max_Var_Key_Size + rozmiar w bajtach maksymalny o zmiennej długości, klastrowanie klucz kolumn zestaw nie indeks nieklastrowany klucz kolumn (+ 4), jeśli jest nieunikatowy indeks klastrowany

  4. Do zarządzania opcje dopuszczania wartości null kolumna może być już zarezerwowana część wiersza, znane jako null mapy bitowej.Obliczanie rozmiaru:

    W przypadku pustych kolumn w kluczu indeksu, w tym wszelkie niezbędne klastrowanie kolumny klucz, jak opisano w kroku 1.3, część wiersza indeksu jest zarezerwowany dla mapy bitowej wartości null.

    Index_Null_Bitmap = 2 + ((number of columns in the index row + 7) / 8)

    Należy używać tylko część całkowita liczby poprzedniego wyrażenie.Odrzucić wszystkie pozostałe.

    Jeśli nie ma żadnych pustych kolumn klucz zestaw Index_Null_Bitmap to 0.

  5. Obliczanie rozmiaru danych o zmiennej długości:

    W przypadku o zmiennej długości kolumn klucz indeksu, w tym wszystkie kolumny kluczy potrzebnego indeks klastrowany Określa, ile miejsca jest używany do przechowywania kolumny w wierszu indeksu:

Variable_Key_Size* = 2 + (Num_Variable_Key_Cols x 2) + *Max_Var_Key_Size

Bajty dodawane do ***Max\_Var\_Key\_Size*** służą do śledzenia poszczególnych zmiennych kolumn.Ta formuła opiera się na założeniu, że wszystkie kolumny o zmiennej długości są 100 procent.Jeśli przewidujesz, że zostanie użyta wartość procentową mniejszą miejsca do magazynowania o zmiennej długości kolumna, można dopasować ***Max\_Var\_Key\_Size*** wartości przez procent w ten sposób, aby dawała dokładniejsze oszacowanie całkowitego rozmiaru tabela.

Jeśli brak kolumn o zmiennej długości, ustawianie ***Variable\_Key\_Size*** to 0.
  1. Obliczanie rozmiaru Indeks wiersza:

    Index_Row_Size = Fixed_Key_Size + Variable_Key_Size + Index_Null_Bitmap 1 (dla wiersza nagłówka obciążenie związane z wierszem indeks) + 6 (w przypadku wskaźnika identyfikator strona podrzędność)

  2. Obliczanie liczby wierszy indeksu na każdej stronie (8096 wolnego miejsca na każdej stronie):

    Index_Rows_Per_Page = 8096 / (Index_Row_Size + 2)

    Ponieważ indeksu wierszy nie obejmują strona s, numer indeksu wierszy na strona powinny być zaokrąglana niedziałający do najbliższej cały wiersz.2 W formule jest zapis w wierszu w tablicy gniazda strona.

Krok 2.Oblicz ilość miejsca używanego do magazynu informacji indeksu w poziomie poziom liścia

Następujące kroki umożliwiają oszacować ilość miejsca jest wymagana do przechowywania na poziomie typu poziom liścia indeksu.Konieczne będzie wartości zachowane z kroku 1, aby ukończyć ten krok.

  1. Określ liczbę kolumn o stałej długości i o zmiennej długości na poziomie poziom liścia i obliczyć miejsca wymaganego do ich przechowywania.

    Uwaga

    Indeks nieklastrowany można rozszerzyć przez dołączenie nonkey kolumn wraz z kolumny kluczy indeksu.Te dodatkowe kolumny są przechowywane tylko na poziomie poziom liścia indeks nieklastrowany.Aby uzyskać więcej informacji zobaczTworzenie indeksów za pomocą zestawu kolumn.

    Uwaga

    Można łączyć varchar, nvarchar, varbinary, lub sql_variant kolumny, które powodują szerokość tabela zdefiniowaną całkowita przekracza 8,060 bajtów. Długość każdej z tych kolumn nadal muszą mieścić się w granicach 8000 bajtów dla varchar, varbinary, lub sql_variant kolumna i 4 000 bajtów nvarchar kolumna. Jednak ich szerokości Scalonej może przekroczyć limit 8,060 bajt w tabela.Dotyczy to również indeks nieklastrowany liść wiersze, które zostały uwzględnione w kolumnach.Aby uzyskać więcej informacji zobaczRow-Overflow Data Exceeding 8 KB.

    Jeśli indeks nieklastrowany nie ma żadnych kolumn uwzględnione, należy użyć wartości z kroku 1, łącznie z wszystkimi zmianami w kroku 1.3:

Num_Leaf_Cols* = *Num_Key_Cols

Fixed_Leaf_Size* = *Fixed_Key_Size

Num_Variable_Leaf_Cols* = *Num_Variable_Key_Cols

Max_Var_Leaf_Size* = *Max_Var_Key_Size

Jeśli indeks nieklastrowany dołączone kolumny, należy dodać odpowiednie wartości z wartościami z kroku 1, łącznie z wszystkimi zmianami w kroku 1.3.Rozmiar kolumna zależy od specyfikacji typ i długość danych.Aby uzyskać więcej informacji zobacz[Typy danych (aparat bazy danych)](ms187594\(v=sql.100\).md).

***Num\_Leaf\_Cols*** = ***Num\_Key\_Cols*** + liczba kolumn dołączone

***Fixed\_Leaf\_Size*** = ***Fixed\_Key\_Size*** + rozmiar w bajtach całkowity o stałej długości dołączone kolumny

***Num\_Variable\_Leaf\_Cols*** = ***Num\_Variable\_Key\_Cols*** + liczba o zmiennej długości dołączone kolumny

***Max\_Var\_Leaf\_Size*** = ***Max\_Var\_Key\_Size*** + rozmiar w bajtach maksymalny o zmiennej długości dołączone kolumny
  1. Konto dla Lokalizator wierszy danych:

    W przypadku nieunikatowy indeks nieklastrowany uwzględniono obciążenie Lokalizator wiersza danych w kroku 1.3 i żadne dodatkowe modyfikacje nie są wymagane.Przejdź do następnego kroku.

    Jeśli indeks nieklastrowany jest unikatowa, lokalizator wiersz danych musi być uwzględnione w wszystkie wiersze na poziomie poziom liścia.

    Jeśli indeks nieklastrowany znajduje się nad sterty, lokalizator wiersz danych jest sterty RID (rozmiar 8 bajtów).

    Num_Leaf_Cols = Num_Leaf_Cols + 1

    Num_Variable_Leaf_Cols = Num_Variable_Leaf_Cols + 1

    Max_Var_Leaf_Size = Max_Var_Leaf_Size + 8

    Jeśli indeks nieklastrowany znajduje się w indeksie klastrowanym, lokalizator wiersz danych jest klastrowanie klucz.Te kolumny są kolumny, które muszą być połączone z kluczem indeks nieklastrowany klastrowanie klucz, który nie jest już obecny zestaw kolumn klucza indeks nieklastrowany.

    Num_Leaf_Cols = Num_Leaf_Cols + numer kolumny klucz nie znajduje się zestaw klastrowania indeks nieklastrowany klucz kolumn (+ 1), jeśli jest nieunikatowy indeks klastrowany

    Fixed_Leaf_Size = Fixed_Leaf_Size + liczba o stałej długości klastrowanie klucz kolumn zestaw nie indeks nieklastrowany klucz kolumn

    Num_Variable_Leaf_Cols = Num_Variable_Leaf_Cols + numer o zmiennej długości, klastrowanie kolumny klucz nie znajduje się zestaw nieklastrowany indeks klucz kolumn (+ 1) Jeśli nieunikatowy indeks klastrowany

    Max_Var_Leaf_Size = Max_Var_Leaf_Size + rozmiar w bajtach długość zmiennej klastrowanie kolumny klucz nie znajduje się zestaw nieklastrowany indeks klucz kolumn (+ 4), jeśli nieunikatowy indeks klastrowany

  2. Obliczyć rozmiar mapy bitowej wartości null:

    Leaf_Null_Bitmap = 2 + ((Num_Leaf_Cols + 7) / 8)

    Należy używać tylko część całkowita liczby poprzedniego wyrażenie.Odrzucić wszystkie pozostałe.

  3. Obliczanie rozmiaru danych o zmiennej długości:

    W przypadku kolumn o zmiennej długości klucz indeksu, jak opisano wcześniej w kroku 2.2, w tym niezbędne klastrowania kolumny klucz określa, ile miejsca jest używany do przechowywania kolumny w wierszu indeksu:

Variable_Leaf_Size* = 2 + (Num_Variable_Leaf_Cols x 2) + *Max_Var_Leaf_Size

Bajty dodawane do ***Max\_Var\_Key\_Size*** służą do śledzenia poszczególnych zmiennych kolumn.Ta formuła opiera się na założeniu, że wszystkie kolumny o zmiennej długości są 100 procent.Jeśli przewidujesz, że zostanie użyta wartość procentową mniejszą miejsca do magazynowania o zmiennej długości kolumna, można dopasować ***Max\_Var\_Leaf\_Size*** wartości przez procent w ten sposób, aby dawała dokładniejsze oszacowanie całkowitego rozmiaru tabela.

Jeśli brak kolumn o zmiennej długości, ustawianie ***Variable\_Leaf\_Size*** to 0.
  1. Obliczanie rozmiaru Indeks wiersza:

    Leaf_Row_Size = Fixed_Leaf_Size + Variable_Leaf_Size + Leaf_Null_Bitmap 1 (dla wiersza nagłówka obciążenie związane z wierszem indeks) + 6 (w przypadku wskaźnika identyfikator strona podrzędność)

  2. Obliczanie liczby wierszy indeksu na każdej stronie (8096 wolnego miejsca na każdej stronie):

    Leaf_Rows_Per_Page = 8096 / (Leaf_Row_Size + 2)

    Ponieważ indeksu wierszy nie obejmują strona s, numer indeksu wierszy na strona powinny być zaokrąglana niedziałający do najbliższej cały wiersz.2 W formule jest zapis w wierszu w tablicy gniazda strona.

  3. Obliczanie liczby zastrzeżonych wolnych wierszy na strona, na podstawie współczynnik wypełnienia określone:

    Free_Rows_Per_Page = 8096 x ((100 - Fill_Factor) / 100) / (Leaf_Row_Size + 2)

    Współczynnik wypełnienia, używana do obliczania jest wartością całkowitą zamiast wartości procentowej.Ponieważ wierszy nie span strona s, liczba wierszy na strona powinny być zaokrąglana niedziałający do najbliższej cały wiersz.Współczynnik wypełnienia porządek w rosnącej więcej danych będą przechowywane na każdym strona i będzie mniej strona s.2 W formule jest zapis w wierszu w tablicy gniazda strona.

  4. Obliczanie liczby stron wymaganych do przechowywania wszystkich wierszy:

    Num_Leaf_Pages = Num_Rows / (Leaf_Rows_Per_Page - Free_Rows_Per_Page)

    Liczba stron szacowane powinny zaokrąglana w górę do najbliższej całą strona.

  5. Obliczyć rozmiar indeksu (8192 całkowita liczba bajtów na każdej stronie):

Leaf_Space_Used* = 8192 x *Num_Leaf_Pages

Krok 3.Oblicz ilość miejsca używanego do magazynu informacji indeks poziomu nie typu liść

Wykonaj następujące kroki, aby oszacować ilość miejsca wymaganą do przechowywania pośredniego i główne poziomów wskaźnika.Konieczne będzie wartości zachowane z kroki 2 i 3, aby ukończyć ten krok.

  1. Obliczanie liczby poziomów typu nie liść w indeksie:

    Typu nie liść poziomy = 1 + log Index_Rows_Per_Page (Num_Leaf_Pages / Index_Rows_Per_Page)

    Zaokrąglanie tę wartość do najbliższej liczby całkowitej.Wartość ta nie obejmuje poziomu poziom liścia indeks nieklastrowany.

  2. Obliczanie liczby stron typu nie liść w indeksie:

Num_Index_Pages* = ∑Poziom (Liczba_stron_liści/Liczba_wierszy_indeksu_na_stronęPoziom), gdzie 1 <= Poziom <= *Poziomy

Zaokrąglanie każdego summand w górę do najbliższej liczby całkowitej.Jako przykład proste, należy wziąć pod uwagę indeksu w przypadku gdy ***Num\_Leaf\_Pages*** = 1000 and ***Index\_Rows\_Per\_Page*** = 25.Pierwszego poziomu indeksu powyżej poziom liścia są przechowywane 1000 indeksu wiersze, które jest jeden wiersz indeksu strona typu poziom liścia, a 25 wierszy indeksu można zmieścić na jednej stronie.Oznacza to, że 40 stron są wymagane do przechowywania tych wierszy, indeks 1000.Następny poziom indeks musi przechowywać 40 wierszy.Oznacza to, że wymaga on 2 strony.Końcowe poziom indeks musi przechowywać 2 wiersze.Oznacza to, czy wymaga on 1 stronie.Daje to 43 stron typu nie liść indeksu.Jeśli liczby te są używane w poprzedniej formuły, wynik jest następujący:

***Inne niż leaf\_Levels*** = 1 + log25 (1000 / 25) = $ 3

***Num\_Index\_Pages*** = 1000/(253)+ 1000 /(252) + 1000 /(251) = 1 + 2 + 40 = 43, czyli numer strony w przykładzie.
  1. Obliczyć rozmiar indeksu (8192 całkowita liczba bajtów na każdej stronie):

Index_Space_Used* = 8192 x *Num_Index_Pages

Krok 4.Suma obliczonych wartości

Suma wartości uzyskane z dwa poprzednie kroki:

  • Indeks nieklastrowany rozmiar (w bajtach) = Leaf_Space_Used + Index_Space_used

To obliczenie nie bierze pod uwagę następujące czynności:

  • partycjonowanie

    Miejsce na dodatkowe obciążenie z partycjonowanie jest minimalny, ale skomplikowane obliczenia.Nie jest ważne, aby dołączyć.

  • Podział stron

    Istnieje co najmniej jedną strona IAM używane do śledzenia przydzielonych do sterty, stron, ale jest minimalne obciążenie miejsca i nie ma żadnych algorytm deterministically obliczyć dokładnie zostanie użyta liczba stron IAM.

  • Wartości dużych obiektów (LOB)

    Algorytm do określenia dokładnie miejsca, w jaki sposób mają być używane do przechowywania typów dane LOB varchar(max), varbinary(max), nvarchar(max), text, ntext, xml, a image wartości jest złożona. Wystarczy po prostu dodać średni rozmiar wartości LOB oczekiwana, należy pomnożyć przez Num_Rowsi dodać, do rozmiaru indeks nieklastrowany całkowitej.

  • Kompresja

    Nie można pre-calculate rozmiar skompresowanego indeksu.