考虑以下DDL:
ALTER TABLE dbo.MyTable
ADD CONSTRAINT [PK_MyKey] PRIMARY KEY CLUSTERED ([Id] ASC)
WITH (STATISTICS_NORECOMPUTE=OFF, IGNORE_DUP_KEY=OFF, DATA_COMPRESSION=PAGE)
GO这是一个压缩的主键。塔达!
困扰我的是,我在SSMS中没有看到任何压缩的记录?
DATA_COMPRESSION设置。我得到:/****** Object: Index [PK_MyKey] Script Date: 07/09/2020 11:01:16 ******/
ALTER TABLE [dbo].[MyTable] ADD CONSTRAINT [PK_MyKey] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY]
GO所以..。是否有可能知道现有的键(我没有创建,谁的创建没有版本控制:叹息:)是否被压缩了?
发布于 2020-09-07 10:18:59
根据文档,这可以在sys.indexes和sys.partitions对象中找到:
元数据 以下系统视图包含有关聚集索引的数据压缩的信息:
过程储蓄(Transact-SQL)也可以应用于列存储索引。
具体而言,对于上面的内容,您希望查看列data_compression和/或data_compression_desc
CREATE TABLE dbo.MyTable_Comp (ID int NOT NULL);
ALTER TABLE dbo.MyTable_Comp
ADD CONSTRAINT [PK_MyKey_C] PRIMARY KEY CLUSTERED ([Id] ASC)
WITH (STATISTICS_NORECOMPUTE=OFF, IGNORE_DUP_KEY=OFF, DATA_COMPRESSION=PAGE)
GO
CREATE TABLE dbo.MyTable_NoComp (ID int NOT NULL);
ALTER TABLE dbo.MyTable_NoComp
ADD CONSTRAINT [PK_MyKey_NC] PRIMARY KEY CLUSTERED ([Id] ASC)
WITH (STATISTICS_NORECOMPUTE=OFF, IGNORE_DUP_KEY=OFF);
GO
SELECT i.[name], p.[data_compression], p.data_compression_desc
FROM sys.indexes i
JOIN sys.partitions p ON i.object_id = p.object_id
WHERE i.[name] IN ('PK_MyKey_C','PK_MyKey_NC');
GO
DROP TABLE dbo.MyTable_Comp;
DROP TABLE dbo.MyTable_NoComp对于上面的2个表,这将返回以下内容:
name | data_compression | data_compression_desc
------------|------------------|----------------------
PK_MyKey_C | 2 | PAGE
PK_MyKey_NC | 0 | NONEhttps://stackoverflow.com/questions/63775432
复制相似问题