WEB开发网
开发学院数据库MSSQL Server 表无索引为什么sp_spaceused 中的index_size不为0... 阅读

表无索引为什么sp_spaceused 中的index_size不为0

 2009-10-19 00:00:00 来源:WEB开发网   
核心提示: 通过上面的代码,我们可以基于我们目前的这个情况(堆表,表无索引为什么sp_spaceused 中的index_size不为0(2),不含有xml和fulltext,所以上面的202/204那段不用管了)提练出index的page如下算法:selectindex_pagecount=sum(use

通过上面的代码,我们可以基于我们目前的这个情况(堆表,不含有xml和fulltext,所以上面的202/204那段不用管了)提练出index的page如下算法:

select index_pagecount=sum(used_page_count)-
sum(in_row_data_page_count + lob_used_page_count + row_overflow_used_page_count)
from sys.dm_db_partition_stats  
where object_id = object_id('TUser'); 

这个结果是1.再套上index_size的公式:

select index_size = LTRIM (STR ((1) * 8, 15, 0) + ' KB')
/**//*
8k
*/

这就是8k的算法,从下面联机文档上关于sys.dm_db_partition_stats 的解释,可以分析出这个8k是个IAM page.

used_page_count  bigint

用于分区的总页数。计算方法为 in_row_used_page_count + lob_used_page_count + row_overflow_used_page_count

上面我们算index_page时公式为:

sum(used_page_count)-
sum(in_row_data_page_count + lob_used_page_count + row_overflow_used_page_count)

也就是in_row_used_page_count -in_row_data_page_count

对于这两列,联机文档解释是:

in_row_used_page_count

用于存储和管理分区中的行内数据的总页数。该计数包括非叶 B 树页、IAM 页以及 in_row_data_page_count 列包含的全部页。

in_row_data_page_count

分区中存储行内数据所用的页数。如果分区是堆的一部分,则该值为堆中的数据页数。如果分区是索引的一部分,则该值为叶级别中的页数。(未计入 B 树中非叶页的数目。)以上两种情况都未计入 IAM(索引分配映射)页。

针对我们目前该表的情况,仅是一个堆表,那么可知前者是包含了IAM页,而后者不含有IAM页,那么sp_spaceused中的index_size在这里就是一个IAM(索引分配映射)页。

其实这个也可以通过DBCC IND看到:

表无索引为什么sp_spaceused 中的index_size不为0

图片看不清楚?请点击这里查看原图(大图)。

如有错误,欢迎指正。

文章来源:http://www.cnblogs.com/nzperfect/archive/2009/10/18/1585641.html

上一页  1 2 

Tags:索引 为什么 sp

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接