我在SQL Server 2012 Express中有一个数据库,有一个特定的表我很难理解。
所述表具有CI和以下属性:
CREATE TABLE [dbo].[Hourly_Flows]
(
[S_ID] [smallint] NOT NULL,
[FromID] [tinyint] NOT NULL,
[ToID] [tinyint] NOT NULL,
[Hour8760] [smallint] NOT NULL,
[FromTo] [smallint] NULL,
[ToFrom] [smallint] NULL,
CONSTRAINT [PK__oHF_Hour__60BEC9D565570293]
PRIMARY KEY CLUSTERED ([S_ID] ASC, [FromID] ASC, [ToID] ASC, [Hour8760] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
我创建了一个新的空DB,使用完全相同的表并将所有记录插入其中,新旧表的大小如下:
+--------------+--------------+--------------+
| Table | Old | New |
+--------------+--------------+--------------+
| RowCounts | 109,911,720 | 109,911,720 |
| TotalPages | 436,323 | 259,137 |
| UsedPages | 436,270 | 259,098 |
| DataPages | 434,434 | 258,009 |
| TotalSpaceMB | 3,408 | 2,024 |
| UsedSpaceMB | 3,408 | 2,024 |
| DataSpaceMB | 3,394 | 2,015 |
+--------------+--------------+--------------+
正如您所看到的,新表格中的页面和大小要小得多。在将数据插入原始表之前,我尝试截断表,删除并重新创建,清除并始终获得相同的结果。
不确定我在这里缺少什么,如果我将数据重新插入原始表中,我会得到相同的结果。唯一的另一个问题可能是数据库的增长超过了SQL Server Express数据库的10GB大小限制,但不确定为什么这会产生影响。
该表曾经有更多列被删除(因此我们将其截断),我们经常这样做,但这是第一次不减小它的大小。
答案 0 :(得分:0)
页数和数据量取决于许多变量:
1-插入,更新和删除计数:导致某些页面变为空位置。
2- own database fill factor:此参数表示页面可以填充多少。 (对于将来使用的页面中的保留位置)
3-数据库整理:在某些整理中,相同的数据使用更多或更少的空间。
在Marc结束时,新数据库意味着干净的表面以干净的方式写入数据。