如果数据计数增加,SQL Server DB 表数据大小查询结果不会增加

Sat*_*mar 4 sql-server insert database-size sql-server-2014 bulk-insert

我有一个查询,它将显示 SQL Server 中数据库表的记录的表名、行数和大小。当我执行查询时,我得到了一个结果显示

TableName            NumberOfRows   SizeinKB
TBL_PROCESS_AUDIT2   1              16
Run Code Online (Sandbox Code Playgroud)

但是当我使用相同的插入查询将更多记录插入同一个表并执行查询时,它显示更多的行数 (50) 但大小相同 (16kb)。

TableName            NumberOfRows   SizeinKB
TBL_PROCESS_AUDIT2   50             16
Run Code Online (Sandbox Code Playgroud)

实际上,当表的行数增加时,它的大小也应该增加。因此,对于 1 条记录,大小为 16KB,因此对于 50 条记录,大小应为 800KB。当我插入像大约 2000 条记录这样的批量记录时,大小会有所不同。

我的查询中的逻辑或问题是什么?我想要一个数据库表的记录的实际大小。

我的查询:

CREATE TABLE #RowCountsAndSizes (TableName NVARCHAR(128),rows CHAR(11),      
       reserved VARCHAR(18),data VARCHAR(18),index_size VARCHAR(18), 
       unused VARCHAR(18))

EXEC       sp_MSForEachTable 'INSERT INTO #RowCountsAndSizes EXEC sp_spaceused ''?'' '

SELECT     TableName,CONVERT(bigint,rows) AS NumberOfRows,
           CONVERT(bigint,left(reserved,len(reserved)-3)) AS SizeinKB
FROM       #RowCountsAndSizes 
ORDER BY   NumberOfRows DESC,SizeinKB DESC,TableName

DROP TABLE #RowCountsAndSizes
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 11

SQL Server 将数据存储在 8kb 页上。您不能拥有小于两页的表格。因此,当您向表中添加一行时,您的最小空间消耗为 2 * 8kb = 16kb。但是这些页没有满,这意味着再添加 15 行不会使表大小增加(15 * 初始大小),这仅意味着保存初始行的数据页有足够的空间容纳更多数据。如果您再添加 1000 行,我敢打赌您的大小会增加,但这取决于一行中的内容以及 8kb 页面上可以容纳多少行。

如果您只想查看已使用页面上的空间而忽略未使用页面上的空间,我不知道这是否重要,实际上,表中有多少数据。无论页面有 10 字节的数据还是 7,997 字节,您都将在磁盘上占用 8 kb,在内存中占用 8 kb。因此,您会看到大多数空间计算脚本只是占用,(number of pages) * 8,192因为页面上未使用的空间很少相关。