Sql server SQL压缩是否对;无”;清理数据表?

Sql server SQL压缩是否对;无”;清理数据表?,sql-server,compression,Sql Server,Compression,我正在尝试减少超过4GB且不断增长的SQL Server数据库的存储空间。我在SSMS中打开数据压缩向导,在最大的表上选择压缩类型“无”,然后单击计算按钮。我感到惊讶的是,结果不到原来的一半(2.2 GB降至1 GB以下),即使没有压缩 这是真正的节约吗?也就是说,将压缩设置为“无”是否执行一次性清理未使用空间?还是这是浪费时间 不,没有 compressiontype=NONE意味着在不应用任何压缩的情况下重建表中的索引。因此,它不会改变数字。下次打开表的压缩向导时,单击“计算”后,它将显示相

我正在尝试减少超过4GB且不断增长的SQL Server数据库的存储空间。我在SSMS中打开数据压缩向导,在最大的表上选择压缩类型“无”,然后单击计算按钮。我感到惊讶的是,结果不到原来的一半(2.2 GB降至1 GB以下),即使没有压缩

这是真正的节约吗?也就是说,将压缩设置为“无”是否执行一次性清理未使用空间?还是这是浪费时间

不,没有

compressiontype=NONE意味着在不应用任何压缩的情况下重建表中的索引。因此,它不会改变数字。下次打开表的压缩向导时,单击“计算”后,它将显示相同的数字


好的,在使用示例数据库进行测试后,以下是我的发现。重要的是,将表的压缩设置为“无”会导致SSM生成如下脚本:

USE [MyDatabase]
ALTER TABLE [dbo].[MyTable] REBUILD
PARTITION = ALL
WITH (DATA_COMPRESSION = NONE)
特别要注意“alter table MyTablerebuild”如果表已被修改(如删除列),则每行中都有未使用的空间。“重建”选项将回收此空间,表将变小

所以,回答我自己的问题:是的,将compression设置为“None”是一次性清理表中未使用的空间。由此产生的节省不如“计算”按钮所显示的那么好,但在我的示例中仍然很重要

尽管如此,一个简单的“altertablemytable重建”也可以完成同样的任务


(我要感谢那些发帖的人!)

ALTER TABLE REBUILD
可以删除内部碎片,所以这是可能的。我不知道那个向导是否考虑到了这一点。不,是一样的。它重建索引,这意味着一次性清理表中未使用的空间。您说过:下次打开表的压缩向导时,单击“计算”后,它将显示相同的数字。。。但是如果它被清理了,那么数字会改变吗?至少有一段时间……这个问题有点让人困惑。压缩类型=无与减少表中的空间无关;其他类型(行、页)也有。重建可能减少空间的事实并不意味着它实际上总是减少空间。如果索引没有碎片,那么空间将不会发生任何变化。如果存在碎片,则将进行一次性清理。在这种情况下,使用compression type=NONE减少的空间与重建索引和一次性清理重叠。在这之后,它并没有减少空间的效果。使用compression type=NONE代替重建所有索引并错误地认为通过应用压缩可以减少空间是毫无意义的。压缩类型=无用于从应用于索引的其他压缩类型(页、行)返回。在这种情况下,它将扩展索引的空间。