Organizacji indeksu i tabeli

Tabele i indeksy są przechowywane jako kolekcja stron 8 KB.W tym temacie opisano sposób strony tabela i indeks.

Tabela organizacji

Na poniższej ilustracji przedstawiono organizacji tabela.Tabela znajduje się w jednej lub kilku partycji i każda partycja zawiera wiersze danych w sterty lub struktury indeks klastrowany.Strony sterty lub indeks klastrowany są zarządzane w jednostek alokacji, w zależności od kolumna typów wierszy danych.

Organizacja tabel za pomocą partycji

Partycje

Tabela i indeksu strony są zawarte w jednej lub kilku partycji.Partycja jest jednostka danych organizacji użytkownika.Domyślnie tabela lub indeksu ma tylko jedną partycję, która zawiera wszystkie strony tabela lub indeksu.Partycja znajduje się w jednym grupa plików.Tabela lub indeks z jedną partycją jest równoważne struktury organizacyjnej tabel i indeksów w starszych wersjach SQL Server.

Kiedy korzysta wiele partycji z tabela lub indeksu, danych jest podzielony na partycje poziomo, aby grup wierszy są mapowane do poszczególnych partycji, na podstawie określonej kolumna.Partycje można umieścić na jeden lub więcej aplikacjami w bazie danych.Tabela lub indeks jest traktowany jako pojedynczy logiczny obiekt podczas kwerendy lub aktualizacje są wykonywane na danych.Aby uzyskać więcej informacji, zobacz Podzielonym na partycje tabel i indeksów.

Aby wyświetlić partycje używane przez tabela lub indeks, użyj sys.Partitions (Transact-SQL) wykazu widoku.

Stosach klastrowanego tabel i indeksów

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

  • Klastrowany tabele są tabelami, których indeks klastrowany.

    Wiersze danych przechowywane są w kolejności, w zależności od indeks klastrowany klucz.Indeks klastrowany jest zaimplementowany jako B-drzewo struktury indeksu, który obsługuje szybkiego pobierania wierszy, oparte na ich indeks klastrowany klucz wartości.Strony każdego poziomu indeksu, w tym stron danych w poziom liścia poziom, są połączone z listy połączonych podwójnie.Jednak nawigacja z jednego poziom jest wykonywane przy użyciu wartości klucz.Aby uzyskać więcej informacji, zobacz Struktury indeksu klastrowanego.

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

    Wiersze danych nie są przechowywane w określonej kolejności i nie ma żadnych określonej kolejności sekwencji stron danych.Strony danych nie są połączone w połączonej listy.Aby uzyskać więcej informacji, zobacz Struktury sterty.

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

Kiedy sterty lub klastrowanego tabela ma wiele partycji, każda partycja ma sterty lub B-drzewo strukturę, która zawiera grupę wierszy dla określonych na tej partycji.Na przykład jeśli klastrowanego tabela ma cztery partycje, istnieją cztery drzewa B; jedna w każdej partycji.

Zbudowania indeksów

Zbudowania indeksów mają B-drzewo struktury indeksu, podobny do przedstawionego w indeksach klastrowanych.Różnica polega na ponownego zbudowania indeksów nie wpływają kolejność wierszy danych.poziom liścia Poziom zawiera wiersze indeksu.Każdy wiersz indeks zawiera nieklastrowany wartości klucz, lokalizator wierszy i kolumn dołączone lub nonkey.Lokalizator wskazuje wiersz danych zawierający wartości klucz.Aby uzyskać więcej informacji, zobacz Struktury indeks nieklastrowany.

Indeksy XML

Podstawowego i kilku indeksów pomocniczych XML mogą być tworzone na każdym xml kolumna w tabela.Indeks XML jest shredded i trwałe reprezentacji XML duże obiekty binarne (bloków BLOB) w xml Typ danych kolumna.XML indeksy są przechowywane jako wewnętrzny tabel.Aby wyświetlić informacje o indeksach xml, użyj sys.xml_indexes lub sys.internal_tables widoki wykazu.

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

Jednostki alokacji

Jednostka alokacji jest kolekcja stron w obrębie stosu lub B-drzewa używana do zarządzania danymi, na podstawie ich typu strona.Poniższa tabela zawiera listę typów jednostek alokacji używane do zarządzania danymi w tabelach i indeksy.

Typ jednostki alokacji

Służy do zarządzania

IN_ROW_DATA

Obiektów typu danych lub indeksu wierszy, które zawierają wszystkie dane, z wyjątkiem dużego obiektu (LOB) danych.

Strony są typu danych lub indeksu.

LOB_DATA

Dużego obiektu danych przechowywanych w jednej lub więcej z tych typów danych: text, ntext, image, xml, varchar(max), nvarchar(max), varbinary(max), or CLR user-defined types (CLR UDT).

Strony są typu tekst i obraz.

ROW_OVERFLOW_DATA

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

Strony są typu tekst i obraz.

Więcej informacji o strona typów, 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 jednostka alokacji informacji, użyj sys.allocation_units wykazu widoku.

Jednostka alokacji IN_ROW_DATA

Dla każdej partycji tabela (sterty lub klastrowanego tabela), indeksu lub indeksowany widok, jest jednej jednostka alokacji IN_ROW_DATA składa się z kolekcja danych stron.Ta jednostka alokacji zawiera również dodatkowe kolekcje stron do wdrożenia każdego nieklastrowany i indeks XML zdefiniowanych dla tabela lub widoku.Zakotwiczone kolekcji strona w każdej partycji tabela, indeks lub indeksowany widok przez strona wskaźniki w sys.system_internals_allocation_units widok systemu.

Ważna informacjaWażne:

The sys.system_internals_allocation_units system view is reserved for Microsoft SQL Server internal use only.Przyszłe zgodność nie jest gwarantowane.

Każdą tabela, indeksu i partycji indeksowany widok ma wiersza w sys.system_internals_allocation_units jednoznacznie zidentyfikowane przez identyfikator kontener (container_id).Identyfikator kontener ma mapowanie jeden do jednego z id_partycji w sys.partitions widok, który zachowuje relację między tabela, indeks lub przechowywane w partycji danych indeksowany widok i jednostek alokacji używane do zarządzania danymi w partycji katalogu.

Podział strony tabela, indeks lub partycji indeksowany widok jest zarządzany przez łańcucha IAM stron.Kolumna first_iam_page w sys.system_internals_allocation_units wskazuje na pierwszej stronie IAM w łańcuchu IAM strona Zarządzanie miejsca przydzielonego tabela, indeks lub indeksowany widok w IN_ROW_DATA jednostka alokacji.

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

  • Sterty ma wiersza w sys.partitions z index_id = 0.

    First_iam_page kolumna w sys.system_internals_allocation_units punkty łańcucha IAM dla kolekcja stron danych sterty w określonej partycji.Serwer używa stron IAM Aby znaleźć strona kolekcja strona danych, ponieważ nie są połączone.

  • Indeks klastrowany na tabela lub widoku ma wiersz w sys.partitions z index_id = 1.

    Root_page kolumna w sys.system_internals_allocation_units wskazuje na początek indeks klastrowany B-drzewa w określonej partycji.Serwer używa indeksu B-drzewo odnaleźć strony danych partycji.

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

    Root_page kolumna w sys.system_internals_allocation_units wskazuje na początek indeks nieklastrowany B-drzewa w określonej partycji.

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

    First_iam_page kolumna wskazuje łańcucha IAM stron, które zarządzają stron w LOB_DATA jednostka alokacji.

Jednostka alokacji ROW_OVERFLOW_DATA

Dla każdej partycji tabela (sterty lub klastrowanego tabela), indeksu lub indeksowany widok, nie ma jednej jednostka alokacji ROW_OVERFLOW_DATA.Ta jednostka alokacji zawiera zero (0) strony aż do wiersza danych o zmiennej długości kolumny (varchar, nvarchar, varbinary, lub sql_variant) w alokacji IN_ROW_DATA jednostka przekracza limit rozmiaru wiersza 8 KB.Po osiągnięciu limitu rozmiaru SQL Server Przenosi kolumna o szerokości największej z tego wiersza do strona w ROW_OVERFLOW_DATA jednostka alokacji.24-Bajtowy wskaźnik do danych poza wiersz ten jest utrzymywana na oryginale strona.

Tekst i obraz strony w ROW_OVERFLOW_DATA jednostka alokacji są zarządzane w taki sam sposób stron w LOB_DATA jednostka alokacji są zarządzane.Oznacza to, że strony tekstu i obrazu są zarządzane przez łańcuch stron IAM.

Jednostka alokacji LOB_DATA

Po 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 magazynem danych.Następujące typy dane LOB text, ntext, image, xml, varchar(max), nvarchar(max), varbinary(max)i CLR zdefiniowane przez użytkownika typów.

Przykład jednostki alokacji i partycji

Poniższy przykład zwraca partycji i jednostka alokacji danych dla dwóch tabel: DatabaseLog, sterty z dane LOB i nie zbudowania indeksów i Currency, klastrowane tabela bez dane LOB i jeden indeks nieklastrowany.Obie tabele mają jedną partycję.

USE AdventureWorks2008R2;
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.Należy zauważyć, że DatabaseLog tabela używa wszystkich trzech jednostka alokacji typy, ponieważ zawiera ona dane i typy tekstu i obrazu strona.Currency tabela nie ma dane LOB, ale jednostka alokacji, wymagane do zarządzania danych stron.Jeśli Currency tabela jest modyfikowany później dołączyć kolumna typu dane LOB, jednostka alokacji LOB_DATA służy do zarządzania tym danych.

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)