Table 有两种结构:BTree 和 Heap,一个table的结构必定是其中之一。如果在表上创建clustered index,那么表的结构是BTree;如果表上没有创建Clustered index,那么表的结构是Heap。Heap 可以看作一种特殊的Index结构,Index ID 是0,只有一层,Leaf Level,或Data level。BTree 的Clustered Index的ID 是1, Leaf Level是Table的Data Page。
Index pages fall into three basic types: leaf level for nonclustered indexes, nonleaf level for clustered indexes, and nonleaf level for nonclustered indexes. There isn‘t really a separate structure for leaf level pages of a clustered index because those are the data pages.
一,DBCC IND命令
DBCC IND ( { ‘dbname‘ | dbid }, { ‘objectname‘ | objectid },{ nonclustered indexid | 1 | 0 | } [, partition_number] )
DBCC IND输出字段描述
Column | Meaning |
PageFID | 索引所在文件ID |
PagePID | 索引页ID |
IAMFID | File ID of the IAM managing this page,IAM page的IAMFID=NULL |
IAMPID | Page ID of the IAM managing this page,IAM page的IAMPID=NULL |
ObjectID | 对象ID |
IndexID | 索引类型ID,0表示堆,1表示聚集索引,2-1005表示非聚集索引。可以在sys.indexs上查找 |
PartitionNumber | Partition number within the table or index for this page |
PartitionID | ID for the partition containing this page (unique in the database) |
iam_chain_type | Type of allocation unit this page belongs to: in-row data, row-overflow data, or LOB data |
PageType | Page type: 1 = data page, 2 = index page, 3 = LOB_MIXED_PAGE, 4 = LOB_TREE_PAGE, 10 = IAM page |
IndexLevel | 索引级别,0表示叶子节点,根节点的级别最高 |
NextPageFID | File ID for next page at this level,同一level上,下一个索引页所在文件的ID |
NextPagePID | Page ID for next page at this level |
PrevPageFID | File ID for previous page at this level |
PrevPagePID | Page ID for previous page at this level,同一level上,上一个索引页的PageID |
微软推荐使用 DMF: sys.dm_db_database_page_allocations 来代替 DBCC IND命令
二,使用DBCC IND查看Heap结构
Create table dbo.MyHeap ( ID int identity, Fill nchar(3900) ) go --Insert 11 rows insert into dbo.MyHeap default values; go 11 --Output --DataBaseID TableID --7 1136056991 select db_id() as DataBaseID,object_id(N‘dbo.MyHeap‘,N‘U‘) as TableID
使用DBCC IND查看Heap 分配的Page
DBCC IND (7,1136056991,0)
分析结果:共有13行,2个IAM Page,11个Data page
1,IAM Chain
有两个IAM Page (page Type=10),两个IAM Page组成一个chain,Chain是一个双向链表结构,后向指针(NextPageFID ,NextPagePID),前向指针(PrevPageFID,PrevPID)
2,Data Page
11个Data page之间没有双向链接,而是松散存放,使用IAM链接起来,每个Data Page的IAMFID 和IAMPID指向IAM Page。
3,Index Structure
IndexLevel=0,表示Page是Index的Leaf-Level。Heap中的data page没有层次结构,都是Data node,Heap的Data Node可以看作Index leaf level。
三,使用DBCC IND查看BTree 结构,Index 是Clustered Index
Create table dbo.MyBTree ( ID int identity primary key clustered, Fill nchar(3900) ) go --Insert 11 rows insert into dbo.MyBTree default values; go 11 --Output --DataBaseID TableID --7 1152057048 select db_id() as DataBaseID,object_id(N‘dbo.MyBTree‘,N‘U‘) as TableID DBCC IND (7,1152057048,1)
分析结果:共有14行,2个IAM,11个Data Page,1个Index Page
1,IAM Chain
2个IAM Page组成一个IAM Chain,使用双向链表连接起来
2,Data Page
11个Data Page组成一个双向链表,Clustered Index Key定义了Data page的存储的逻辑顺序
3,Index Page
IndexLevel 最高的字段是Root Node,IndexLevel>0的page都是Index page,存储的数据是Index 结构信息。
IndexLevel=0,表示Page是Index的Leaf-Level,如果IndexID是1,该Index是clustered Index, Leaf-Level 是table的data page。
Note:将一个Table由Heap结构转变成BTree结构,Data Page的数量不变,增加的是Index Page的数量,为了管理更多的Index Page,IAM chain可能会变长,即增加IAM page来track clustered Index(Index page和 Data Pages)。
四,使用DBCC IND查看BTree 结构,Index 是NonClustered Index
不管Nonclustered index是创建在Table的任一结构(Heap或BTree)上,Nonclustered index的结构是相同的。
1,查看Heap上的Nonclustered index structure
create index ix_MyHeap_ID on dbo.MyHeap(ID) DBCC IND (7,1136056991,2)
分析结果:2行,一个IAM Page,一个Index page
IAM Page用以track DB Object使用的存储空间,在Heap上创建一个Nonlustered Index,为了标识该Index使用的存储空间(Index Page),Sql server 新建了一个IAM chain。
Note:在创建Clustered Index时,并没有新建IAM Chain,说明Clustered index 就是Table本身,只不过使用Index page 将Data page 组织起来。
2,查看BTree上的Nonclustered index structure
为BTree 增加一个Column,并创建 Nonclustered index structure
alter table dbo.MyBTree add code int not null constraint DF_MyBTree_code default(1); create index ix_MyBTree_code on dbo.MyBTree(code);
查看NonClustered Index page
DBCC IND (7,1152057048,2)
分析结果:共2行,一个IAM Page,一个Index Page
五,总结
1,Heap 结构
2,Clustered Index结构
3,NonClustered Index结构
原文:http://www.cnblogs.com/ljhdo/p/5137590.html