-1

我试图在 sql server 数据表上实现“行”数据压缩。在一个具有 116000 条记录和 30 列(10-15 列可能符合行数据压缩条件)的数据表上成功执行脚本后,我按照以下步骤进行物理内存消耗验证:

第 1 步)我为驱动器中的数据库计算所有数据文件(mfd、ldf 和 ndf)的存储空间。结果为 6.63 GB。

步骤 2) 成功执行行数据压缩脚本,例如

USE [DbName]
ALTER TABLE [dbo].[TableName] REBUILD PARTITION = ALL
WITH 
(DATA_COMPRESSION = ROW
)

第 3 步)按照第 1 步)得到 6.66GB。这些步骤之间没有单一的事务和数据插入。

我是在做错误的验证,还是我对数据压缩的想法有误。

假设: Int(4 byte) 数据类型且存储值小于 100 的数据列将被压缩存储在 1 byte(small Int) 的空间中。对于其他数据列也是如此。

4

1 回答 1

0

有向您显示数据的过程:sp_estimate_data_compression_savings。您可以在评估表是否会从压缩中受益之前运行它。

至于表大小,可以使用系统函数来确定大小。这可能是一个很好的起点:

declare @object_id int = object_id('dbo.mytable');
declare @dbid int = db_id();
select 
table_size_in_bytes = page_count * 8192
--, * 
from sys.dm_db_index_physical_stats(@dbid, @object_id, -1, 0, null)
where index_id in (0,1);
于 2015-01-07T09:09:40.967 回答