Tablo ve dizin organizasyon

Tablolar ve dizinler saklanır gibi bir koleksiyon 8 kb sayfa.Bu konuda, tablo ve dizin sayfaları düzenli şekilde açıklanmaktadır.

Tablo kuruluşu

Tablo kuruluşu aşağıda gösterilmiştir.Bir tablo bir veya daha fazla bölüm içinde yer alan ve her bölüm veri satırlarını yığın veya kümelenmiş dizin yapısını içerir.Kümelenmiş dizin veya yığın sayfaları veri satırları sütun türleri bağlı bir veya daha fazla ayırma birimleri yönetilir.

Bölüm içeren tablo düzenlemesi

Bölümleri

Tablo ve dizin sayfaları, bir veya daha fazla bölümde saklanır.Bir bölüm bir kullanıcı tanımlı veri kuruluş birimidir.Varsayılan olarak, tüm tablo ya da dizin sayfaları içeren yalnızca bir bölümü bir tablo ya da dizin vardır.Bölüm'de tek bir dosya grubu bulunuyor.Bir tablo ya da dizin tek bir bölüme sahip tablolar ve dizinler önceki sürümlerinde kuruluş yapısı eşittir SQL Server.

Bir tablo ya da dizin birden çok bölüm kullandığında, böylece satır grupları ayrı ayrı bölümlere göre belirtilen, eşlenen veri yatay olarak bölümlenmiş sütun.Bölümler veritabanındaki bir veya daha fazla filegroups üzerinde koyabilirsiniz.Tablo ya da dizin sorguları veya güncelleştirmeler üzerindeki verileri yapılırken tek bir mantıksal 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çin sys.Partitions (Transact-sql) Katalog görünümü.

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

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

  • kümelenmiş dizin olan tablolar kümelenmiş tablolarıdır.

    Veri satırlarını kümelenmiş dizin anahtar temel sırayla saklanır.Kümelenmiş dizin kümelenmiş dizin anahtar değerlerine dayalı satır hızlı alınmasını destekler bir B-ağacı dizin yapısı olarak uygulanır.Her düzeyde yaprak düzey veri sayfaları da dahil olmak üzere dizin sayfaları karakteriyle bağlantılı liste halinde bağlantı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 kümelenmiş dizin yok olan tablolarıdır.

    Veri satırları belirli bir sırada depolanan ve veri sayfalarının sırasını belirli hiçbir sipariş yoktur.Veri sayfaları bağlı bir listede bağlı değildir.Daha fazla bilgi için bkz: Yığın yapıları.

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

Bir yığın veya kümelenmiş bir tablo olduğunda birden çok bölüm, her bölüm bir yığın ya da o belirli bir bölümü için satır grubunu içeren B-ağacı yapısı vardır.Örneğin, dört bölüm kümelenmiş bir tablo varsa, dört b-ağaç vardır; Her bölüm biri.

Kümelenmemiş dizinleri

B-ağacı dizin yapısı benzer bir kümelenmiş dizinler kümelenmemiş dizinleri vardır.Kümelenmemiş dizinler veri satır sırasını etkilemez fark vardır.Yaprak düzey satır dizini içerir.Her dizin satır kümelenmemiş anahtar değeri, bir satır verisini ve içerdiği veya anahtarı olmayan, sütunlar içerir.Anahtar değeri olan veri satır Konumlandırıcı gösteriyor.Daha fazla bilgi için bkz: Kümelenmemiş dizin yapıları.

xml dizinler

Bir birincil ve ikincil xml dizinler birkaç oluşturulabilir her xml sütun tablo.Bir xml dizin bir shredded ve kalıcı xml ikili büyük nesneleri (BLOB) içinde gösterimidir xml veri türü sütun.xml dizin iç tablolar olarak depolanır.Xml dizinler hakkında bilgi görüntülemek için sys.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 dizinlerde.

Ayırma birimi

Ayırma birimi olan bir koleksiyon bir yığın veya verileri sayfa türlerine göre yönetmek için kullanılan B-ağacı içindeki sayfa.Aşağıdaki tablo verileri yönetmek için kullanılan ayırma birim türlerini listeler tablos ve dizinler.

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 türü sayfalardır.

LOB_DATA

Aşağıdakilerden birini veya birkaçını bu veri türleri içinde depolanan büyük nesne verisi: text, ntext, image, xml, varchar(max), nvarchar(max), varbinary(max), or CLR user-defined types (CLR UDT).

Metin/resim türünü sayfalardır.

ROW_OVERFLOW_DATA

Değişken uzunlukta veri depolanan varchar, nvarchar, varbinary, veya sql_variant sütunlar, geçen 8,060 bayt satır boyutu sınırı.

Metin/resim türünü sayfalardır.

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

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

IN_ROW_DATA ayırma birimi

Dizin veya dizinli görünüm, her bölüm bir tablo (yığın veya kümelenmiş tablo) tarafından kullanılan için oluşan bir IN_ROW_DATA ayırma birimi vardır bir koleksiyon veri sayfaları.Bu ayırma birimi de sayfaları her kümelenmemiş uygulamak ve xml dizin tablo ya da görünüm için tanımlanan ek koleksiyon içerir.Her bölümde sayfa koleksiyonları, tablo, dizin veya dizinli görünüm sayfası işaretçilerinde ile bağlantılı olduğunu sys.system_internals_allocation_units sistem görünüm.

Önemli notÖnemli

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

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

Bir tablo, dizin veya dizinli görünüm Bölümü sayfalarına ayrılması IAM sayfaları zinciri tarafından yönetilir.Sütun first_iam_page , sys.system_internals_allocation_units gösteren IAM sayfalarını yönetmek için ayrılan alan zincirdeki ilk IAM sayfasına tablo, dizin veya dizinli görünüm IN_ROW_DATA ayırma birimi.

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

  • Bir yığın bir satır vardır sys.partitions ile 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.IAM sunucunun kullandığı sayfabulmak için s sayfas veri sayfa koleksiyonu, bağlı oldukları için.

  • Kümelenmiş dizin üzerinde bir tablo veya Görünüm satır vardır sys.partitions ile 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ğacı dizin bölümünde 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

Dizin veya dizinli görünüm, her bölüm bir tablo (yığın veya kümelenmiş tablo) tarafından kullanılan için bir row_overflow_data ayırma birimi vardır.Değişken uzunlukta sütun içeren bir veri satırı kadar sıfır (0) sayfalarını bu ayırma birimi içerir (varchar, nvarchar, varbinary, veya sql_variant) IN_ROW_DATA ayırma birimi 8 kb satır boyutu sınırı. aşanBoyut sınırına ulaşıldığında, SQL Server hareket sütun o satırın en büyük kalınlığında bir sayfa row_overflow_data ayırma biriminiBu satır veri 24 bayt işaretçi orijinal sayfa üzerinde tutulur.

Metin/resim sayfaları row_overflow_data ayırma birimi lob_data ayırma biriminde sayfaları 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, bölüm başına bir lob_data ayırma birimi o verilerinin depolanmasını yönetirsiniz tahsis edilir.lob veri türleri dahil text, ntext, image, xml, varchar(max), nvarchar(max), varbinary(max)ve clr kullanıcı tanımlı türler.

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

Aşağıdaki örnek, iki tablo bölümü ve ayırma birimi verileri döndürür: DatabaseLog, yığın lob veri ve hiçbir kümelenmemiş dizinleri ve Currency, kümelenmiş bir tablo lob veri ve bir kümelenmemiş dizin.Her iki tabloda tek bir bölüm vardır.

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;

Sonuç kümesi buradadır.Dikkat DatabaseLog üç tablo kullanan ayırma birimi , hem veri hem de metin/resim sayfa türleri. içerdiğinden türleriThe Currency table does not have LOB data, but does have the allocation unit required to manage data pages.If the Currency table is later modified to include a LOB data type column, a LOB_DATA allocation unit is created to manage that data.

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)