我有一个按月划分的大型表(700 亿行)
它有2个索引
- deviceId、logDateTime、eventId、id 上的聚集索引(唯一)
- id 上的非聚集索引(唯一)- 主键
第一个聚集索引与分区对齐,第二个非聚集主键在主文件组上不对齐
我想将第二个非聚集索引与分区对齐,以便轻松截断分区数据等。
根据我读到的内容,我需要删除索引并重新创建它,我可以先创建它,然后删除旧索引并将新索引设置为主键吗?
我正在寻找一种停机时间最少/无停机时间的解决方案,因为它是 24/7 数据库
SQL Server 2017 企业版
当前的不良指数是
ALTER TABLE [dbo].[LogData] ADD CONSTRAINT [PK_LogData] PRIMARY KEY NONCLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = ON, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 99) ON [PRIMARY]
GO
当我查看创建新索引时,我要么有一个文件组,要么有一个分区方案,如果我选择分区方案,则只有一个名为PartitionByMonthScheme的分区方案,它只允许我选择日期时间作为列,这会生成以下内容
CREATE UNIQUE NONCLUSTERED INDEX [ix_newindex_id] ON [dbo].[LogData]
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PartitionByMonthScheme]([LogDateTime])
我假设这是正确的,在我这样做之后,它会将新索引与分区对齐吗?然后我必须删除旧的 PK 索引并使这个新索引成为主键?
或者我应该首先取消主键的链接,然后将主键创建索引作为一项操作?
对于实现上述目标的建议和帮助将不胜感激。谢谢