Organizacja indeksu i tabela

Tabele oraz indeksy są przechowywane jako zbiór stron 8 KB.W tym temacie opisano sposób, w tabela i indeksu strony są organizowane.

Schemat tabela

Następująca ilustracja przedstawia organizację tabela.Tabela znajduje się w jednej lub kilku partycji, a każda partycja zawiera wiersze danych w sterty lub struktury indeks klastrowany.Jeden lub więcej jednostek alokacji, w zależności od typów kolumn w wierszach danych można zarządzać stron sterty lub indeks klastrowany.

Table organization with partitions

Partycje

Tabela i indeksu strony znajdują się w jednej lub kilku partycji.Partycja to jednostkę zdefiniowaną przez użytkownika danych organizacji.Domyślnie tabela lub indeksu ma tylko jedną partycję, który zawiera wszystkie strony tabela lub indeksu.Partycja znajduje się w jedną grupa plików.Tabela lub indeksu z jedną partycją jest odpowiednikiem struktury organizacyjnej tabel i indeksów w starszych wersjach SQL Server.

Gdy korzysta wiele partycji z tabela lub indeks, dane jest podzielony na partycje poziomo, aby grup wierszy będą przypisywane do poszczególnych partycji, na podstawie określonej kolumna.Partycje mogą być umieszczane na jeden lub więcej filegroups w bazie danych.Tabela lub indeksu jest traktowana jako pojedyncza obiekt logiczna podczas kwerendy lub aktualizacje są wykonywane na danych.Aby uzyskać więcej informacji zobaczTabele podzielonym na partycje i indeksów.

Aby wyświetlić partycje, używane przez tabela lub indeksu, należy użyć sys.Partitions (języka Transact-SQL) Służy do wyświetlania katalogu.

Stosach klastrowanych tabele i indeksów

SQL Server tabele należy użyć jednej z dwóch metod organizowania stron danych w obrębie partycji:

  • Klastrowany tabele są tabelami, z indeksem klastrowanym.

    Wiersze danych są przechowywane w kolejności, opartą na kluczu indeks klastrowany.Indeks klastrowany jest zaimplementowany jako struktura indeksu B-drzewa, która obsługuje szybkiego pobierania wierszy, w zależności od ich indeks klastrowany klucz wartości.Na liście podwójnie połączone są połączone strony z każdego poziomu indeksu, w tym stron danych na poziomie poziom liścia.Jednak nawigacja z jednego poziom jest wykonywane przy użyciu wartości klucz.Aby uzyskać więcej informacji zobaczStruktury indeks klastrowany.

  • Hałd są tabele, które mają nie indeks klastrowany.

    Wiersze danych nie są przechowywane w określonej kolejności i nie losowej kolejności sekwencji stron danych.Strony danych nie są połączone w połączonej listy.Aby uzyskać więcej informacji zobaczStruktury sterty..

Widoki indeksowane mają taką samą strukturę magazynu jako tabele klastrowanych.

Kiedy stosu lub klastrowanych tabela ma wiele partycji, każda partycja ma sterty lub struktury B-drzewo zawierającą grupę wierszy dla tego określonej partycji.Na przykład, jeśli klastrowanych tabela ma cztery partycje, istnieją cztery drzewa B; jeden w każdej partycji.

Indeksy nieklastrowany

Ponownego zbudowania indeksów nie klastrowanych ma strukturę indeksu B-drzewo podobny do przedstawionego w indeksach klastrowanych.Różnica polega na czy ponownego zbudowania indeksów nie klastrowanych nie wpływają na porządek wierszy danych.Na poziomie typu poziom liścia zawiera wiersze indeksu.Każdy wiersz indeks zawiera nieklastrowany wartości klucz, lokalizator wierszy i kolumn dostępna lub nonkey.Lokalizator wskazuje na wiersz danych, który ma wartość klucz.Aby uzyskać więcej informacji zobaczStruktury indeks nieklastrowany.

Indeksy XML

Podstawowego i pomocniczego, kilka indeksów XML mogą być tworzone na każdym xml Kolumna w tabela. Indeks XML jest reprezentacją shredded i trwałe binarne, dużych obiektów XML (bloków BLOB) w xml Typ danych kolumna. Indeksy XML są przechowywane jako tabele wewnętrznych.Aby wyświetlić informacje o indeksach xml, należy użyć sys.xml_indexes or sys.internal_tables widoki wykazu.

Aby uzyskać więcej informacji na temat indeksów XML zobacz Indeksy w kolumnach typu danych XML.

Jednostki alokacji

Jednostka alokacji jest kolekcja stron w ramach stosu lub B-drzewo, używane do zarządzania danymi w zależności od ich typu strona.W poniższej tabela wymieniono rodzaje jednostek alokacji używany do zarządzania danymi w tabelach i indeksach.

Typ jednostka alokacji

Służy do zarządzania

IN_ROW_DATA

Obiektów typu wiersze danych lub indeksu, które zawierają wszystkie dane, z wyjątkiem dużych obiektów (LOB) danych.

Strony są typu danych lub indeks.

LOB_DATA

Dane dużych obiektów przechowywanych w jednej lub kilku z tych typów danych: text, ntext, image, xml, varchar(max), nvarchar(max), varbinary(max), lub CLR typów zdefiniowanych przez użytkownika (CLR UDT).

Strony są typu tekstu/obrazu.

ROW_OVERFLOW_DATA

Przechowywane w danych o zmiennej długości varchar, nvarchar, varbinary, lub sql_variant kolumny, które przekraczają limit rozmiaru wierszy 8,060 bajtów.

Strony są typu tekstu/obrazu.

Aby uzyskać więcej informacji na temat typów stron zobacz Opis stron i zakresów.

Sterty lub B-drzewo może mieć tylko jedną jednostkę alokacji każdego typu w określonej partycji.Aby wyświetlić tabela lub indeksu informacji jednostka alokacji, należy użyć sys.allocation_units Służy do wyświetlania katalogu.

Jednostka alokacji IN_ROW_DATA

Dla każdej partycji jest używana przez tabela (sterty lub klastrowanych tabela), indeks lub widok indeksowany, nie ma jednej jednostka alokacji IN_ROW_DATA składa się ze zbioru danych strony.Ta jednostka alokacji zawiera także dodatkowe kolekcji stron, aby zaimplementować każdego nieklastrowany i indeksem XML zdefiniowanych dla tabela lub widoku.Kolekcje strona w każdej partycji tabela, indeks lub widok indeksowany są zakotwiczone przez strona wskaźniki w sys.system_internals_allocation_units widok systemu.

Important noteImportant Note:

The sys.system_internals_allocation_units system view is reserved for Microsoft SQL Server internal use only.Nie ma gwarancji przyszłej zgodności.

Ma wiersz w każdej tabela, indeksu i partycji widok indeksowany sys.system_internals_allocation_units unikatowo identyfikowane za pomocą IDENTYFIKATORA kontener ( container_id).IDENTYFIKATOR kontener jest mapowanie typu jeden-do-jednego, aby id_partycji in the sys.Partitions wykazu widok, który zachowuje relację między w tabela, indeks, lub dane widok indeksowany, przechowywane w partycji i jednostek alokacji, używane do zarządzania danymi w obrębie tej partycji.

Podział strony do tabela, indeks lub partycji widok indeksowany jest zarządzany przez łańcuch IAM stron.kolumna first_iam_page in sys.system_internals_allocation_units wskazuje IAM pierwszej strona w łańcuchu IAM strona Zarządzanie miejsce, przydzielone do tabela, indeks lub widok indeksowany, IN_ROW_DATA jednostka alokacji.

sys.Partitions zwraca wiersz dla każdej partycji, w tabela lub indeksu.

  • Sterty ma w wierszu sys.Partitions with index_id = 0.

    The first_iam_page kolumna in sys.system_internals_allocation_units points to the IAM chain for the kolekcja of heap data pages in the specified partition.Serwer używa stron IAM znaleźć na stronach w zbiorze strona danych, ponieważ nie są połączone.

  • Indeksem klastrowanym dla tabela lub widoku ma w wierszu sys.Partitions with index_id = 1.

    The root_page kolumna in sys.system_internals_allocation_units points to the top of the indeks klastrowany B-drzewo in the specified partition.Serwer używa indeksu B-drzewo do znalezienia stron danych na partycji.

  • Each nonclustered index created for a table or a view has a row in sys.partitions with index_id > 1.

    The root_page kolumna in sys.system_internals_allocation_units points to the top of the indeks nieklastrowany B-drzewo in the specified partition.

  • Each table that has at least one LOB column also has a row in sys.partitions with index_id > 250.

    The first_iam_page kolumna points to the chain of IAM pages that manage the pages in the LOB_DATA jednostka alokacji.

Jednostka alokacji ROW_OVERFLOW_DATA

Dla każdej partycji jest używana przez tabela (sterty lub klastrowanych tabela), indeks lub widok indeksowany, brak ROW_OVERFLOW_DATA jednostka alokacji.Ta jednostka alokacji zawiera zero (0) strony do wiersza danych o zmiennej długości kolumny (varchar, nvarchar, varbinary, lub sql_variant) do alokacji IN_ROW_DATA jednostki przekracza limit rozmiaru wiersz 8 KB. Po osiągnięciu limitu rozmiaru SQL Server Przenosi kolumna z największą szerokość z tego wiersza strona w ROW_OVERFLOW_DATA jednostka alokacji. 24-Bajtowy wskaźnik do danych poza wiersza jest przechowywana na oryginalny strona.

Strony tekstu/obrazu w ROW_OVERFLOW_DATA jednostka alokacji są zarządzane w ten sam sposób strony LOB_DATA jednostka alokacji są zarządzane.To znaczy stron tekstu/obrazu są zarządzane przez łańcuch IAM stron.

Jednostka alokacji LOB_DATA

Jeśli tabela lub indeksu ma jeden lub więcej typów dane LOB, LOB_DATA jednostka alokacji dla każdej partycji jest przydzielany do zarządzania przechowywania tych danych.Następujące typy dane LOB text, ntext, image, xml, varchar(max), nvarchar(max), varbinary(max), a CLR typów zdefiniowanych przez użytkownika.

Partycja i przykład jednostka alokacji

W poniższym przykładzie są zwracane partycji i jednostka alokacji danych dla dwóch tabel: DatabaseLog, sterty dane LOB i nie nieklastrowany indeksy i Currency, klastrowanych tabela bez dane LOB i jeden indeks nieklastrowany. Obie tabele mają tylko jedną partycję.

USE AdventureWorks;
GO
SELECT o.name AS table_name,p.index_id, i.name AS index_name , au.type_desc AS allocation_type, au.data_pages, partition_number
FROM sys.allocation_units AS au
    JOIN sys.partitions AS p ON au.container_id = p.partition_id
    JOIN sys.objects AS o ON p.object_id = o.object_id
    JOIN sys.indexes AS i ON p.index_id = i.index_id AND i.object_id = p.object_id
WHERE o.name = N'DatabaseLog' OR o.name = N'Currency'
ORDER BY o.name, p.index_id;

Oto zestaw wyników.Zwróć uwagę, że DatabaseLog Tabela używa wszystkie typy jednostek przydziału trzech, ponieważ zawiera ono zarówno dane jak i typy stron tekstu/obrazu. The Currency tabela does not have LOB data, but does have the jednostka alokacji required to manage data pages. Jeśli Currency Tabela zmienia się później dołączyć kolumna typu dane LOB, LOB_DATA jednostka alokacji jest tworzony do zarządzania tymi danymi.

table_name  index_id index_name               allocation_type     data_pages  partition_number 
----------- -------- -----------------------  ---------------     -----------  ------------
Currency    1        PK_Currency_CurrencyCode IN_ROW_DATA         1           1
Currency    3        AK_Currency_Name         IN_ROW_DATA         1           1
DatabaseLog 0        NULL                     IN_ROW_DATA         160         1
DatabaseLog 0        NULL                     ROW_OVERFLOW_DATA   0           1
DatabaseLog 0        NULL                     LOB_DATA            49          1
(5 row(s) affected)