源于csdn论坛的一个提问:

表无索引为什么sp_spaceused 中的index_size不为0CREATE TABLE TUser ( FName CHAR(8000), FAge INT, FSex bit )
表无索引为什么sp_spaceused 中的index_size不为0
INSERT INTO TUser
表无索引为什么sp_spaceused 中的index_size不为0
SELECT '张三',18,1 UNION ALL
表无索引为什么sp_spaceused 中的index_size不为0
SELECT '李四',20,1 UNION ALL
表无索引为什么sp_spaceused 中的index_size不为0
SELECT '王五',32,1 UNION ALL
表无索引为什么sp_spaceused 中的index_size不为0
SELECT '麻子',23,1
表无索引为什么sp_spaceused 中的index_size不为0

 
通过一个查询看下扫描的数据页:

表无索引为什么sp_spaceused 中的index_size不为0SET STATISTICS IO ON
表无索引为什么sp_spaceused 中的index_size不为0
SELECT * FROM TUser
*/

可以看到,该查询全部数据是扫了四个数据页,也就是说插入的四行数据,一行为一个page.

 但是我们执行下面的sql,发现index_size为8k:

表无索引为什么sp_spaceused 中的index_size不为0EXEC sp_spaceused N'TUser'
*/

 这是为什么,为什么没有建索引,这里却有一个index_size 8k ?

 

下面来看看index_size是怎么来的?
首先想到是的

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

通过查看sp_spaceused的代码,我们找到对于我们这个查询有用的信息代码:


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

表无索引为什么sp_spaceused 中的index_size不为0select index_pagecount=sum(used_page_count)-
表无索引为什么sp_spaceused 中的index_size不为0
sum(in_row_data_page_count + lob_used_page_count + row_overflow_used_page_count)
表无索引为什么sp_spaceused 中的index_size不为0
from sys.dm_db_partition_stats  
表无索引为什么sp_spaceused 中的index_size不为0
where object_id = object_id('TUser'); 

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

表无索引为什么sp_spaceused 中的index_size不为0select index_size = LTRIM (STR ((1* 8150+ ' KB')
*/

这就是8k的算法,从下面联机文档上关于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

如有错误,欢迎指正。

 


 

 


 

 

 

 

 

 

 

 

相关文章:

  • 2022-12-23
  • 2021-07-19
  • 2022-12-23
  • 2021-09-21
  • 2021-12-20
  • 2021-07-27
猜你喜欢
  • 2021-07-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-23
  • 2022-01-03
  • 2021-11-21
相关资源
相似解决方案