表无索引为什么sp_spaceused 中的index_size不为0
2009-10-19 00:00:00 来源:WEB开发网通过上面的代码,我们可以基于我们目前的这个情况(堆表,不含有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看到:
图片看不清楚?请点击这里查看原图(大图)。
如有错误,欢迎指正。
文章来源:http://www.cnblogs.com/nzperfect/archive/2009/10/18/1585641.html
更多精彩
赞助商链接