Sql server 在Microsoft SQL Server 2008 R2中,空表使用多少空间?
没有人想简单地删除记录,因此我的同事和我讨论了是否最好附加一个“已删除”标志(datatypeSql server 在Microsoft SQL Server 2008 R2中,空表使用多少空间?,sql-server,sql-server-2008-r2,Sql Server,Sql Server 2008 R2,没有人想简单地删除记录,因此我的同事和我讨论了是否最好附加一个“已删除”标志(datatypebit),或者创建表的副本并将“已删除”记录移动到副本中 由于我们预计每年删除操作的数量较低,但数据中记录的数量较高,因此简单的部分可能会增长很多,这就是我们讨论重复表的原因 因此产生了一个问题:SQL Server 2008 R2中的空表使用了多少空间?要查看SQL Server数据库中的表使用了多少空间,请执行以下操作: 在SQL Server Management Studio中,从对象资源管理
bit
),或者创建表的副本并将“已删除”记录移动到副本中
由于我们预计每年删除操作的数量较低,但数据中记录的数量较高,因此简单的部分可能会增长很多,这就是我们讨论重复表的原因
因此产生了一个问题:SQL Server 2008 R2中的空表使用了多少空间?要查看SQL Server数据库中的表使用了多少空间,请执行以下操作:
- 在SQL Server Management Studio中,从对象资源管理器中选择表,然后从查看菜单访问对象资源管理器详细信息。(关键字快捷方式:F7)
我希望至少有一页(8KB)。这应该很容易。如果您的表包含LOB,则可能会更多 如果您想知道任何开销,您可能需要手动计算。创建一个数据库,禁用自动增长,填充以使其满,尝试创建一个表(希望失败),获取包含可用空间的数据库大小,然后启用自动增长,然后创建一个表,然后再次检查包含可用空间的大小
我希望在这两种情况下,答案都是“太少了,我们不得不考虑将软盘作为一种潜在的存储介质来处理它。”也就是说,8KB大约是64000位,但是。当您创建表时,它的长度将为零。 从表中删除时,不会释放所有已用空间。 截断表时,它将释放所有使用的空间
CREATE TABLE Test(ID int, Name nchar(4000))
GO
EXEC sp_spaceused N'Test'
INSERT INTO Test(ID, Name) VALUES(1, 'a')
EXEC sp_spaceused N'Test'
DELETE FROM dbo.Test
EXEC sp_spaceused N'Test'
TRUNCATE TABLE dbo.Test
EXEC sp_spaceused N'Test'
DROP TABLE Test
输出:
name rows reserved data index_size unused
Test 0 0 KB 0 KB 0 KB 0 KB
Test 1 16 KB 8 KB 8 KB 0 KB
Test 0 16 KB 8 KB 8 KB 0 KB
Test 0 0 KB 0 KB 0 KB 0 KB
您可以阅读以下内容:
有一个SQL选择,用于显示所有表中使用的空间:您的问题似乎与您的问题无关。你的意思是“我的表包含软删除的行,它占用了多少空间”?否则,为什么一张空桌子占据的空间会很有趣呢?显然,如果您只有一个字段,那么它是无关紧要的。@jeroenmoster表中的1到8位字段实际上占用了很多空间。它们是那样包装的。如果他已经有一个位字段,那么这个额外的字段实际上不消耗磁盘空间。问题是:这些都有记录,我想他知道这一点。现在他们正试图了解替代方案的磁盘开销。@BaconBits:那么问题确实是“与使用位字段相比,存放软删除行的表占用了多少空间”。我要求澄清的原因正是因为字面问题的字面答案(“一个空表占用了多少空间”)是不相关的。既然这就是你给出的答案,我不知道你为什么要告诉我OP想要什么。:-)@BaconBits:啊,我想我明白你现在得到的了:在这两种情况下,行的总量保持不变,因此两种解决方案之间的区别是所有位占用的空间与软删除表元数据占用的空间之间的差异。我甚至不会想到这么小的固定开销。。。