【SQL Server2005页面储存5之-非聚集索引行在非叶级别存储】
【SQL Server2005页面存储5之--非聚集索引行在非叶级别存储】
距离上一篇很久很久了。。这个是最后一篇 补上
博客地址:http://blog.****.net/feixianxxx/archive/2010/07/17/5741364.aspx
非聚集索引的非叶级的索引行通过非聚集键值和指针去遍历到下层的非聚集索引页来查找实际数据.
这里有种情况,
一种是这个非聚集索引是具有唯一性的,
还有一种则相反(当然也可以再细分,比如聚集索引是否存在,聚集索引是否唯一等)
先来说说当非聚集索引定义有唯一性的情况
距离上一篇很久很久了。。这个是最后一篇 补上
博客地址:http://blog.****.net/feixianxxx/archive/2010/07/17/5741364.aspx
非聚集索引的非叶级的索引行通过非聚集键值和指针去遍历到下层的非聚集索引页来查找实际数据.
这里有种情况,
一种是这个非聚集索引是具有唯一性的,
还有一种则相反(当然也可以再细分,比如聚集索引是否存在,聚集索引是否唯一等)
先来说说当非聚集索引定义有唯一性的情况
/*----------------------------------------------------------------------
*auther:Poofly
*date:2010.3.14
*VERSION:
Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
Jul 9 2008 14:43:34
Copyright (c) 1988-2008 Microsoft Corporation
Enterprise Evaluation Edition on Windows NT 6.1 <X86> (Build 7600: )
*转载请注明出处
*更多精彩内容,请进http://blog.****.net/feixianxxx
------------------------------------------------------------------------*/
--建表(表源来自技术内幕)
GO
CREATE TABLE NC_JNodes (
id int NOT NULL ,
str1 char (5) NOT NULL ,
str2 varchar (10) NULL
);
GO
--在str2上建立唯一性的聚集索引,在str1上建立具有唯一性的非聚集索引
CREATE UNIQUE CLUSTERED INDEX idxcl_str2 on NC_JNodes (str2);
CREATE UNIQUE INDEX idxNC ON NC_JNodes (str1);
GO
--插入数据
DECLARE @i int;
SET @i = 1240;
WHILE @i < 13000 BEGIN
INSERT INTO NC_JNodes
SELECT @i, cast(@i AS char),
cast(cast(@i * rand() AS int) as char); --打乱了str1的排序
SET @i = @i + 1;
END;
GO
--查看页面分布和页号文件号
TRUNCATE TABLE sp_table_pages;
INSERT INTO sp_table_pages
EXEC ('dbcc ind (poofly,NC_JNodes, -1)');
SELECT PageFID, PagePID, IndexID, IndexLevel, PageType
FROM sp_table_pages
WHERE IndexLevel >= 0;
/*
PageFID PagePID IndexID IndexLevel PageType
------- ----------- ------- ---------- --------
5 967 1 0 1 --该条是聚集索引的叶级别的数据页面
5 969 2 0 2 --该条是非聚集索引的叶级别的索引页面
5 971 1 1 2 --该条是聚集索引的子结点的索引页面
5 972 1 0 1
5 973 2 1 2 --该条是非聚集索引的子结点的索引页面
5 974 2 0 2
5 975 1 0 1
*/
dbcc traceon(3604)
dbcc page(poofly,5,973,1)--非聚集索引的子结点的索引页面
/*
Slot 0, Offset 0x60, Length 12, DumpStyle BYTE
00000000: 06000000 1000c903 00000500 †8224 ?†8224 ?†8224 ?†8224 ?†8224 ?............
Slot 1, Offset 0x138, Length 12, DumpStyle BYTE
00000000: 06313036 33310304 00000500 †8224 ?†8224 ?†8224 ?†8224 ?†8224 ?.10631......
Slot 2, Offset 0x144, Length 12, DumpStyle BYTE
00000000: 06313132 34340404 00000500 †8224 ?†8224 ?†8224 ?†8224 ?†8224 ?.11244......
*/