PK 上的压缩与 Table 上的压缩有什么不同?

Vac*_*ano 9 sql-server compression sql-server-2012

可以在表上设置数据压缩:

CREATE TABLE dbo.SomeTable(
    SomeId [bigint] NOT NULL,
    OtherId [bigint] NOT NULL,
    IsActive [bit] NOT NULL,
 CONSTRAINT [PK_Some] PRIMARY KEY CLUSTERED 
 (
    SomeId Desc
 )
) ON SomePartitionScheme(SomeId) WITH (DATA_COMPRESSION=PAGE)
Run Code Online (Sandbox Code Playgroud)

它可以在主键上定义:

CREATE TABLE dbo.SomeTable(
    SomeId [bigint] NOT NULL,
    OtherId [bigint] NOT NULL,
    IsActive [bit] NOT NULL,
 CONSTRAINT [PK_Some] PRIMARY KEY CLUSTERED 
 (
    SomeId Desc
 ) WITH (DATA_COMPRESSION=PAGE)
) ON SomePartitionScheme(SomeId) 
Run Code Online (Sandbox Code Playgroud)

但是如果你把它放在两者上,你就会得到这个错误:

DATA_COMPRESSION 选项为表指定了多次,如果表已分区,则至少为其中一个分区指定。

把它放在PK上和放在桌子上有什么区别吗?

Mik*_*Fal 14

这不是对主键进行压缩的问题,而是对聚集索引进行压缩的问题。对于 SQL Server,聚集索引在该索引上组织表的物理结构。或者,在较短的形式中,聚集索引就是表。这意味着压缩聚集索引和压缩表在功能上是等效的。如果您将主键创建为非聚集索引并将基表保留为堆,则这两种结构将不同并分别压缩。