Aracılığıyla paylaş


Tablo ve dizin kuruluşu

Tablolar ve dizinler 8-KB sayfalar bir topluluğu olarak depolanır.Bu konu, tablo ve dizin sayfalarının düzenlenmiş şeklini açıklar.

Tablo kuruluşu

Bir tablonun kuruluş aşağıda gösterilmiştir.Tablo bir veya daha fazla bölümlerinde yer alan ve her bölüm veri satırlarını yığın ya da bir kümelenmiş dizin yapısını içerir.Bir veya daha fazla ayırma birimleri, verileri satır, sütun türlerini bağlı olarak yığın veya kümelenmiş dizin sayfaları yönetilir.

Table organization with partitions

bölümlerse kullanılabilir.

Tablo ve dizin sayfaları, bir veya birden çok bölümü yer alır.Kullanıcı tanımlı veri kuruluş biriminin bir bölümdür.Varsayılan olarak, bir tablo ya da dizin, tüm tablo ya da dizin sayfaları içeren tek bir bölüme sahiptir.Bölümü tek bir dosya grubu içinde yer alır.Bir tablo ya da dizini tek bir bölümlü tablolar ve dizinler'ün önceki sürümlerinde kuruluş yapısını eşdeğerSQL Server.

Bir tablo ya da dizin birden fazla bölüm kullanır, böylece satır gruplarını temel alan belirli bir sütun bağımsız bölümlere eşleştirilir verileri yatay olarak bölümlendirilir.Bölümler veritabanındaki bir veya daha fazla dosya grubuna göre sıralayabilirsiniz.Veri sorguları veya güncelleştirmeler gerçekleştirildiğinde tablo ya da dizin tek mantıksal bir varlık olarak kabul edilir.Daha fazla bilgi için bkz:Bölümlenmiş tablolar ve dizinler.

Bir tablo ya da dizin tarafından kullanılan bölümleri görüntülemek içinsys.Partitions (Transact-SQL)Katalog görünümü.

Tablolar, yığınlardaki kümelenmiş ve dizinler

SQL ServerTablolar iki yöntemden birini kendi içinde bir bölüm veri sayfaları düzenlemek için kullanın:

  • Clustered tabloları olan tablolar olan bir kümelenmiş dizin.

    Veri satırlarını, kümelenmiş dizin anahtarını alarak sırayla saklanır.Kümelenmiş dizin olarak uygulanan bir B-ağacı satırları hızlı alınmasını destekler dizin yapısını, kümelenmiş dizin anahtar değerlerine dayalı.Veri sayfalarında da dahil olmak üzere dizinin her düzeyinin sayfalarında yaprak düzey, doubly bağlı bir listede bağlıdır.Ancak, bir gezinti düzey başka anahtar değerleri kullanılarak gerçekleştirilir.Daha fazla bilgi için bkz:Kümelenmiş dizin yapıları.

  • Yığınlardaki şekilde tablosu olan kümelenmiş bir dizini yok.

    Veri satırları belirli bir sırada depolanan ve veri sayfalarının sırasını belirli hiçbir emri yok.Bağlı bir liste içindeki veri sayfaları bağlanır.Daha fazla bilgi için bkz:Öbek yapıları.

Dizin oluşturulmuş görünümler, kümelenmiş tablolar olarak aynı depolama yapısı vardır.

Kümelenmiş bir tablo ya da bir yığın olduğunda birden çok bölüm, her bölüm, bir yığın ve grubu, belirli bir bölümü için bir satır içeren B-ağacı yapısı vardır.Örneğin, kümelenmiş bir tablo dört bölüm, yok dört B ağaçları, her bölüm bir.

Kümelenmemiş dizinleri

B Ağaç dizin yapısı benzer Kümelenmiş dizinde kümelenmemiş dizinleri vardır.Kümelenmemiş dizin veri satırlarını sırasını etkilemez farktır.Yaprak düzeyinde, dizin satırlar içerir.Her dizin satır kümelenmemiş anahtar değeri ve satır Konumlandırıcı dahil ya da olmayan, sütun içerir.Konum Belirleyici anahtar değeri veri satırına işaret eder.Daha fazla bilgi için bkz:Kümelenmemiş dizin yapıları.

XML dizinleri

Bir birincil ve ikincil birkaç XML dizin oluşturulabilir herxmlsütun tablo.Bir XML dizini olan XML ikili büyük nesneleri (BLOB'lar) shredded ve kalıcı bir sunumunuxmlveri türü sütununu tıklatın.XML dizinler iç tablo olarak depolanır.Xml dizinler hakkında bilgi görüntülemek içinsys.xml_indexes veya sys.internal_tables katalog görünümleri.

XML dizinler hakkında daha fazla bilgi için bkz:XML veri türü sütun dizinleri.

Ayırma birimleri

Ayırma birimi olan bir koleksiyon sayfalarının yığın veya veri sayfasına, türüne göre yönetmek için kullanılan B-ağacı.Aşağıdaki tablo, tablolar ve dizinler verileri yönetmek için kullanılan ayırma birimi türlerini listeler.

Ayırma birimi türü

Yönetmek için kullanılır

IN_ROW_DATA

Büyük nesne dışında tüm verileri içeren veri veya dizin satırları (veri LOB).

Veri veya dizin sayfalardır.

LOB_DATA

Büyük nesne verisi bir veya daha fazlası bu veri türleri: text,ntext,image,xml,varchar(max),nvarchar(max),varbinary(max), CLR kullanıcı tanımlı türler (CLR UDT) veya.

Sayfaları, metin/resim türüdür.

ROW_OVERFLOW_DATA

Değişken uzunlukta veri saklananvarchar,nvarchar,varbinary, orsql_variantsütun, uzun 8,060 bayt satır boyutu sınırı.

Sayfaları, metin/resim türüdür.

Sayfa türleri hakkında daha fazla bilgi için bkz:Anlama sayfaları ve alanları.

Bir yığın veya B-ağacı her tür için yalnızca bir ayırma birimi belirli bir bölüme sahip olabilir.Tablo ya da dizin ayırma birimi bilgileri görüntülemek içinallocation_units Katalog görünümü.

IN_ROW_DATA ayırma birimi

Her bölüm tablosuna göre (yığın veya kümelenmiş tablo), dizin veya dizinli görünüm kullanılan için veri sayfaları topluluğu oluşan bir IN_ROW_DATA ayırma birimi vardır.Bu ayırma birimi ek koleksiyon her kümelenmemiş uygulamak için sayfa ve tablo veya Görünüm için tanımlanmış XML dizin de içerir.Tablosu, dizin veya dizinli görünüm, her bölümde sayfa koleksiyonları sayfaya işaretçi ile bağlantılısys.system_internals_allocation_units Sistem görünümü.

Important noteImportant Note:

The sys.system_internals_allocation_units system view is reserved for Microsoft SQL Server internal use only.Gelecekteki uyumluluğu garanti değildir.

Her tablo, dizin ve dizinli görünüm bölümü olan bir satırdasys.system_internals_allocation_units benzersiz bir kapsayıcı kimliği ( kapsayıcı_kimliği ) tanımlanan . Bire bir eşleme kapsayıcı kimliği olanbölüm_kimliği tablo, dizin veya bir bölümünde depolanan dizinli görünüm verileri ve bölüm. verileri yönetmek için kullanılan ayırma birimleri arasındaki ilişkiyi tutar sys.partitions Katalog görünümü

Ayırma sayfaları için bir tablo, dizin veya dizinli görünüm bölümü IAM sayfaları zinciri tarafından yönetilir.Sütunfirst_iam_pagesys.system_internals_allocation_units nokta zincirindeki ilk IAM sayfasına IAM, sayfalar için alan yönetme tablo, dizin veya dizinli görünüm IN_ROW_DATA ayırma unit.

sys.Partitions, bir tablo ya da dizin her bölüm için bir satır döndürür.

  • Bir yığın olan bir satırdasys.Partitions with index_id = 0.

    The first_iam_page column in sys.system_internals_allocation_units points to the IAM chain for the collection of heap data pages in the specified partition.Değil bağlı olduğundan sunucu IAM sayfa veri sayfası koleksiyon sayfaları bulmak için kullanır.

  • Bir satırda bulunan bir tablo veya görünüm üzerinde kümelenmiş dizinsys.Partitions with index_id = 1.

    The root_page column in sys.system_internals_allocation_units points to the top of the clustered index B-tree in the specified partition.Sunucu B Ağaç dizin bölümü veri sayfaları bulmak için kullanır.

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

    The root_page column in sys.system_internals_allocation_units points to the top of the nonclustered index B-tree 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 column points to the chain of IAM pages that manage the pages in the LOB_DATA allocation unit.

ROW_OVERFLOW_DATA ayırma birimi

Her bölüm tablosuna göre (yığın veya kümelenmiş tablo), dizin veya dizinli görünüm kullanılan için bir ROW_OVERFLOW_DATA ayırma birimi vardır.Bu ayırma birimi, değişken uzunlukta sütun içeren bir veri satırı kadar sıfır (0) sayfaları içerir ( varchar, nvarchar, varbinary, ya da sql_variant) IN_ROW_DATA ayırma birimi 8 KB satır boyutu sınırı. aşanZaman boyutu sınırlaması geldi,SQL Serverhareket sütun o satırın en büyük genişlik bir sayfa ROW_OVERFLOW_DATA ayırma ile unit.Orijinal sayfa üzerinde bu satırı devre dışı veri 24-bayt işaretçi tutulur.

Metin/resim sayfaları ROW_OVERFLOW_DATA ayırma biriminde LOB_DATA ayırma birimi sayfalarında yönetilen aynı şekilde yönetilir.Diğer bir deyişle, metin/resim sayfaları IAM sayfalar zinciri tarafından yönetilir.

LOB_DATA ayırma birimi

Bir tablo ya da dizin bir veya daha fazla LOB veri türleri varsa, her bölüm bir LOB_DATA ayırma birimi, veri depolamasını yönetmede tahsis edilir.The LOB veri türleritext,ntext,image,xml,varchar(max),nvarchar(max),varbinary(max), CLR kullanıcı tanımlı türler.

Bölüm ve ayırma birimi örneği

Aşağıdaki örnek iki tablo için bölüm ve ayırma birimi verileri verir: DatabaseLog, LOB verilerin ve kümelenmemiş dizin, bir yığın veCurrency, kümelenmiş bir tablo olmadan LOB verisi ve bir kümelenmemiş dizin.Her iki tabloda tek bir bölüm vardır.

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;

Sonuç kümesi buradadır.DikkatDatabaseLogtablo üç ayırma birim türleri kullanır, çünkü içerdiği her ikisi de veri ve metin/resim sayfa türü.The Currency table does not have LOB data, but does have the allocation unit required to manage data pages.,Currencytabloda daha sonra değişiklik LOB veri türü sütununu eklemek için yönetmek LOB_DATA ayırma birimi oluşturulur.

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)