我应该在添加主键之前还是之后添加页面级压缩?


14

情况

  • Sql Server 2008 Enterprise上的数据仓库
  • 36+百万行堆(不要问),具有60+列
  • 每月增加750k
  • 未定义主键(我现在已经确定了一个)
  • 无压缩

我正在考虑做的事情(按此顺序)

  • 添加页面级压缩
  • 添加PK
  • 添加许多非聚集索引
  • 尽快这样做


我目前偏向的目标

-- Add page level compression
alter table     dbo.TableName
rebuild with    (data_compression = page)
; 
go

-- Add primary key
alter table             dbo.TableName
add constraint          PK_TableName
primary key clustered   (<Columns>)
;
go

-- Add NC_IXs here
...
...

我已经看过这里(PK创建文档)这里(ALTER TABLE文档),但是看不到任何有关是否有任何索引继承表压缩设置的确定性信息。 dba.stackexchange上的此问题的答案是“否,压缩不继承”。

Answers:


12

聚簇索引实际上就是表。假设您的主键是集群的,那么我将创建具有页面级压缩的集群的主键,而不是分两步来尝试。

-- Add primary key
ALTER TABLE             dbo.TableName
ADD CONSTRAINT          PK_TableName
PRIMARY KEY CLUSTERED   (<Columns>)
WITH (DATA_COMPRESSION = PAGE)
;

我还将复制约10万行到临时(临时物理而不是#temporary)表中并运行一些测试。首先尝试运行压缩,首先运行集群密钥,然后尝试将其作为一个步骤进行。看看运行最快的。我个人认为这将是一步:)。


2

无论哪种方式,页面压缩都会在LOT周围重新整理数据。我估计首先进行压缩将导致总体I / O减少,因为群集操作将读取压缩的页面。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.