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
相关文章
- EF调用存储过程查询表中的部分字段,报数据读取器与指定的“AdventureWorksDWModel.Student”不兼容。某个类型为“Age”的成员在同名的数据读取器中没有对应的列。
- B-Tree索引在sqlserver和mysql中的应用
- 分页管理系统计算题 (在某个请求分页管理系统中,假设某进程的页表内容如下表所示)...
- 如何检索某个字段在sqlserver中的哪个些存储过程中?很简单的SQL语句。
- Oracle中如何导出存储过程、函数、包和触发器的定义语句?如何导出表的结构?如何导出索引的创建语句?
- 数据库表设计时一对一关系存在的必要性 数据库一对一、一对多、多对多设计 面试逻辑题3.31 sql server 查询某个表被哪些存储过程调用 DataTable根据字段去重 .Net Core Cors中间件解析 分析MySQL中哪些情况下数据库索引会失效
- 何时在Rails中添加表中的索引
- 在链表中的单个索引处存储多个数据项?
- 已经不再使用的表为什么数据页还在SQLServer的内存缓存中
- SqlServer中查看数据库所有表的表空间和索引空间信息