select * from sys.objects a where a.object_id=OBJECT_ID('aaaa');
select * from sys.partitions b where b.object_id=OBJECT_ID('aaaa'); --index_id=1为聚集索引 index_id=0为堆表 index_id>1为非聚集索引
select * from sys.allocation_units c where c.container_id=72057594042187776; -- 分配单元页
select * from sys.system_internals_allocation_units d where d.container_id=72057594042187776; -- 具体分配单元页
--first_iam_page-->0x 50 00 00 00 01 00-->0x 0001 00000050-->0001=1(文件组编号) 0x00000050=80(页码)
--root_page--> 0x 59 00 00 00 01 00-->0x 0001 00000059-->0001=1(文件组编号) 0x00000059=89(页码)
--first_page--> 0x 78 50 00 00 01 00-->0x 0001 00005078-->0001=1(文件组编号) 0x00005078=20600(页码)
--由此查看出来的信息与 dbcc ind(zws,aaaa,1) 查看出来的信息一致
select * from sys.indexes a where a.object_id=OBJECT_ID('aaaa'); -- index_id=1为聚集索引 index_id=0为堆表 index_id>1为非聚集索引
select * from sys.dm_db_index_physical_stats(DB_ID('zws'),object_id('dbo.aaaa'),1,null,'detailed'); -- 查看B树层数。
dbcc ind(zws,aaaa,1); --查看索引的详细信息。
dbcc page('zws',1,89,3); --由根节点开始,根据 childpageid 和 索引所在列a的值开始下一层的查找。
dbcc page('zws',1,18720,3); -- 中间层,根据 childpageid 和 索引所在列a的值开始下一层的查找。
dbcc traceon(3604); --打开跟踪标记
Go
dbcc page('zws',1,20602,3); --叶子节点
-- 前一页:m_prevPage = (1:20602) 后一页:m_nextPage = (1:20604) 开始地址:Offset 0x4
--Record Type = PRIMARY_RECORD(主记录) Record Type = INDEX_RECORD(索引记录) Record Type = GHOST_DATA_RECORD(虚影,sqlserver数据库后台有一个进程会定期清除标记为虚影的数据)
go
dbcc traceoff(3604); --关闭跟踪标记
Go
相关文章
- 何时在Rails中添加表中的索引
- 已经不再使用的表为什么数据页还在SQLServer的内存缓存中
- SqlServer中查看数据库所有表的表空间和索引空间信息
- SQL SERVER 2012在表上建列存储索引会改变表的数据结构(或存储方式)吗?
- 在sqlserver中将access数据表的内容批量插入到SQL表中
- SqlServer2000中如何用存储过程实现返回一个表的第N1到第N2条记录
- 在SQL Server中的存储过程之间共享表变量
- 将基因表达数据存储在需要的MySQL连接表中?
- 简单测试在存储过程中临时表与union all的性能差别
- 为什么用户信息存储在ASP.NET的默认成员资格提供程序中的两个不同的表中?