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

Adr*_*rie 14 sql-server-2008 sql-server

情况

  • 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
...
...
Run Code Online (Sandbox Code Playgroud)

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

Ken*_*her 12

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

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

我还会将大约 100k 行复制到临时(临时物理而非 #temporary)表并运行一些测试。尝试先运行压缩,先运行集群键,然后尝试将它们作为一个步骤进行。看看什么跑得最快。我想这将是个人的一步:)。