sp_estimate_data_compression_savings (Transact-SQL)

返回所请求对象的当前大小并估算对象在所请求的压缩状态下的大小。 可对所有表或部分表评估压缩。 这包括堆、聚集索引、非聚集索引、索引视图以及表和索引分区。 可使用行压缩或页压缩来压缩这些对象。 如果表、索引或分区已经过压缩,则可使用该过程来估计在重新压缩的情况下该表、索引或分区的大小。

注意注意

在 Microsoft SQL Server 的每个版本中不提供压缩和 sp_estimate_data_compression_savings 功能。 有关 SQL Server 的每个版本支持的功能列表,请参阅 SQL Server 2012 各个版本支持的功能

为了对使用请求的压缩设置的对象进行大小估算,此存储过程将对源对象进行采样并将此数据加载到在 tempdb 中创建的等效表和索引中。 然后,将按照所请求的设置压缩在 tempdb 中创建的表或索引,并计算出估计的压缩节省量。

若要更改表、索引或分区的压缩状态,请使用 ALTER TABLEALTER INDEX 语句。 有关压缩的常规信息,请参阅数据压缩

注意注意

如果现有的数据含有碎片,则可以在不使用压缩的情况下通过重新生成索引来减小数据的大小。 对于索引,在索引重新生成的过程中将应用填充因子。 这可能会增加索引的大小。

主题链接图标 Transact-SQL 语法约定

语法

sp_estimate_data_compression_savings 
     [ @schema_name = ] 'schema_name'  
   , [ @object_name = ] 'object_name' 
   , [@index_id = ] index_id 
   , [@partition_number = ] partition_number 
   , [@data_compression = ] 'data_compression' 
[;]

参数

  • [ @schema\_name= ] 'schema_name'
    包含表或索引视图的数据库架构的名称。 schema_name 的数据类型为 sysname。 如果 schema_name 为 NULL,则使用当前用户的默认架构。

  • [ @object\_name= ] 'object_name'
    索引所属的表或索引视图的名称。 object_name 的数据类型为 sysname。

  • [ @index\_id= ] 'index_id'
    索引的 ID。 index_id 的数据类型为 int,并且可以是下列值之一:索引的 ID 号、NULL 或 0(如果 object_id 为堆)。 若要返回基表或视图的所有索引的信息,请指定 NULL。 如果指定 NULL,则还必须为 partition_number 指定 NULL。

  • [ @partition\_number= ] 'partition_number'
    对象中的分区号。 partition_number 的数据类型为 int,并且可以是下列值之一:索引或堆的分区号、NULL 或 1(对于未分区的索引或堆)。

    若要指定分区,还可指定 $partition 函数。 若要返回所属对象的所有分区的信息,请指定 NULL。

  • [ @data\_compression= ] 'data_compression'
    要评估的压缩的类型。 data_compression 可以是下列值之一:NONE、ROW 或 PAGE。

返回代码值

0(成功)或 1(失败)

结果集

将返回以下结果集,以提供表、索引或分区的当前大小和估计大小。

列名

数据类型

说明

object_name

sysname

表或索引视图的名称。

schema_name

sysname

表或索引视图的架构。

index_id

int

索引的索引 ID:

0 = 堆

1 = 聚集索引

> 1 = 非聚集索引

partition_number

int

分区号。 对于未分区的表或索引,返回 1。

size_with_current_compression_setting (KB)

bigint

当前存在的所请求的表、索引或分区的大小。

size_with_requested_compression_setting (KB)

bigint

使用请求的压缩设置及现有填充因子(如果适用)且假定不存在碎片时的表、索引或分区的估计大小。

sample_size_with_current_compression_setting (KB)

bigint

使用当前压缩设置时的示例大小。 这包括任何碎片。

sample_size_with_requested_compression_setting (KB)

bigint

使用请求的压缩设置及现有填充因子(如果适用)创建的且没有碎片的样本的大小。

注释

可使用 sp_estimate_data_compression_savings 估算对表或分区启用行压缩或页压缩时可能带来的节省量。 例如,如果行的平均大小可以减少 40%,则可能可以将对象大小减少 40%。 您可能无法节省空间,因为这取决于填充因子和行大小。 例如,如果某行长度为 8000 字节并且您将该行的大小减少 40%,则数据页上仍只能容纳一行。 因此不会节省空间。

如果运行 sp_estimate_data_compression_savings 的结果指示表的大小将增长,则表示表中的许多行使用的几乎是数据类型的完全精度,因而为满足压缩格式的需要而增加的少量开销大于该压缩所带来的节省量。 在这种极个别的情况下,请不要启用压缩。

如果对表启用压缩,请使用 sp_estimate_data_compression_savings 估算在未压缩该表的情况下该行的平均大小。

在此操作期间将获取该表的 (IS) 锁。 如果不能获取 (IS) 锁,则该过程将被阻止。 该表将在已提交读隔离级别下进行扫描。

如果请求的压缩设置与当前的压缩设置相同,则该存储过程将返回在没有数据碎片且使用现有填充因子时的估计大小。

如果索引或分区 ID 不存在,将不返回任何结果。

权限

要求对该表具有 SELECT 权限。

示例

下面的示例估计 Production.WorkOrderRouting 表在使用 ROW 压缩进行压缩后的大小。

USE AdventureWorks2012;
GO
EXEC sp_estimate_data_compression_savings 'Production', 'WorkOrderRouting', NULL, NULL, 'ROW' ;
GO

请参阅

参考

CREATE TABLE (Transact-SQL)

CREATE INDEX (Transact-SQL)

sys.partitions (Transact-SQL)

数据库引擎存储过程 (Transact-SQL)

概念

Unicode 压缩的实现