RDS SQL Server在删除变长列或者减小变长列的长度后,表的大小不会自动减小。其中变长列包括的字段类型有varchar、nvarchar、varchar(max)、nvarchar(max)、varbinary、text、ntext、image、sql_variant、varbinary(max)、xml。
问题原因
空间是不会自动回收的,每个记录都占了一个位置。即使删除了数据,位置也会空在那里,下次插入记录的时候,会优先选这些空的槽位。
解决方案
您可以考虑定时重建聚集索引。另外,即使收缩了表的空间,数据库的数据文件大小不会变小。要收缩一个SQL Server的数据文件,必须用DBCC SHRINKDATABASE语句收缩指定数据库的指定数据或日志文件大小,或者用DBCC SHRINKFILE语句收缩当前数据库的指定数据或日志文件大小。MySQL表的空间是独立的一个文件,所以收缩MySQL的大表,可以收缩整体数据库的大小,但是SQL Server所有的表都是在数据库的文件里,只有收缩文件才可以缩小空间。本文主要介绍以下两种方法:
DBCC CLEANTABLE
(
{ database_name | database_id | 0 }
, { table_name | table_id | view_name | view_id }
[ , batch_size ]
)
[ WITH NO_INFOMSGS ]
说明:
具体示例如下所示。
DBCC CLEANTABLE (testDB,'testTable', 0)
WITH NO_INFOMSGS;
GO
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。