Chr*_*oph 0 sql-server database-size size
我在 SQL Server 2012 中有一个包含 460.000 行的表。
该表具有以下架构:

我们的应用程序有问题,所以所有 500.000 行都是Comments用空格填充的。
这导致表大小约为 3.7GB:

在此之后,我执行以下操作来修复结尾空格,但数据库保持在 3.7GB。
update voucher set comments = ltrim(rtrim(comments))
Run Code Online (Sandbox Code Playgroud)
一个快速计算显示,一个完全填充的行大约有 280 个字节的原始数据,一个空行(所有 varchars 为空)有 32 个字节。
这意味着对于 460.000 行,我的表应该在 32MB-122MB 之间。
为什么表是3.7GB?我怎样才能收回空间?
您的行适合页面,即使Comments. Comments将 ltrim(rtrim))更新为使用的空间绝对没有区别,因为行将保留在各自页面中的位置(即绝对没有页面被释放,您只会在每个页面上获得更多可用空间)。要回收丢失的空间,您应该重建表:
ALTER TABLE ... REBUILD;
Run Code Online (Sandbox Code Playgroud)
并不是说 3.7Gb 很大...