2011-07-28 10 views
33

Mam następujące ograniczenie stosowane do jednej z moich tabel, ale nie wiem, co oznacza PAD_INDEX.Jaki jest cel PAD_INDEX w tym ograniczeniu programu SQL Server?

Czy ktoś może mnie oświecić?

CONSTRAINT [PK_Employees] PRIMARY KEY CLUSTERED 
(
    [EmployeeId] ASC 
) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] 
     ^--------------^ 
     this part here 
+2

Witam i zapraszam do przepełnienia stosu. Przeczytaj [pytaj] i [faq], aby uzyskać informacje o tym, jak pisać dobre/odpowiednie pytania tutaj w Stack Overflow. Pozwoliłem sobie na uporządkowanie twojego pytania, aby zmniejszyć prawdopodobieństwo zdobycia wielu głosów. –

Odpowiedz

18

Od MSDN:

PAD_INDEX = {ON | OFF}

Określa wypełnienie indeksu. Domyślna wartość to WYŁ.

WŁ .: Procent wolnego miejsca określony przez współczynnik wypełnienia jest stosowany do stron pośrednich indeksu.

OFF lub fillfactor nie jest określony: Strony o średnim poziomie są wypełnione do bliskiej pojemności, pozostawiając wystarczającą ilość miejsca dla co najmniej jednego wiersza maksymalnego rozmiaru indeksu, biorąc pod uwagę zestaw kluczy na stronach pośrednich.

Opcja PAD_INDEX jest przydatna tylko wtedy, gdy określono FILLFACTOR, ponieważ PAD_INDEX używa wartości procentowej określonej przez FILLFACTOR. Jeśli procent określony dla FILLFACTOR nie jest wystarczająco duży, aby pozwolić na jeden wiersz, Aparat baz danych wewnętrznie zastępuje procent, aby pozwolić na minimum. Liczba wierszy na stronie indeksu pośredniego jest nie mniejsza niż dwa, niezależnie od tego, jak niska jest wartość współczynnika wypełnienia.

W składni zgodnej z poprzednimi wersjami, Z PAD_INDEX jest równoważna Z PAD_INDEX = WŁ.

+0

Dochód, ponieważ jest to czysta kopia od Microsoft bez dodatkowego opracowania. – GaTechThomas

+10

Właściwie to robię to, ponieważ jest to wyjaśnienie, które ma największy sens ... nawet jeśli jest to C & P z innego miejsca. – TomXP411

+1

Dochód, ponieważ pytanie dotyczy celu. Czyste wyjaśnienie techniczne tego, co jest, nie mówi nic o celu i przypadkach, kiedy go używać. – Magier

46

Indeks w SQL Server jest B-Tree

  • FILLFACTOR odnosi się do dolnej warstwy
    ten węzeł liść/warstwa danych na rysunku poniżej

  • PAD_INDEX NA pomocą „Zastosuj fillfactor do wszystkich warstw "
    To jest węzeł główny i poziom pośredni na poniższym obrazku:

Oznacza to, że PAD_INDEX jest użyteczny tylko wtedy, gdy ustawiono FILLFACTOR. FILLFACTOR określa ile wolnego miejsca w stronie danych (w przybliżeniu)

A picture from MSDN:

B-Tree structure

+0

Na tej stronie https://msdn.microsoft.com/en-us/library/ms186869.aspx jest napisane, że gdy włączona jest opcja pad_index, "Procent wolnego miejsca określony przez FILLFACTOR jest stosowany do stron o średnim poziomie indeks". Czy dotyczy to również poziomu głównego? Może to tylko nadzór online nad książkami. –

38

Zasadniczo, można ustawić PAD_INDEX = ON, jeśli dużo przypadkowych zmian indeksu regularnie można się spodziewać.

Pomaga to uniknąć podziału stron indeksu.

Włączam, gdy oczekuję, że 30% + losowych rekordów zawartych w indeksie będzie regularnie usuwanych.

+4

Zawsze lubię komentarze na temat praktycznych przypadków użycia. – neizan

+0

miło to wyjaśnia rzeczy. jeśli nie usuwamy regularnie, nie włączaj go – MonsterMMORPG