好吧,sql db 分区和切换似乎不是一个高度讨论的话题,但它是我正在实施的东西。我在分区功能、分区模式、文件组分配等所有领域都取得了成功。到目前为止,我没有遇到任何分区切换问题,直到发现一个讨厌的 xml 字段正在扼杀性能。所以我尝试添加一个简单的主 xml 分区,但现在所有分区切换都失败了。下面是我在玩的表结构的模拟。
CREATE TABLE [MySchema].[DataTable](
[PartitionKey] [varchar](12) NOT NULL,
[Id] [uniqueidentifier] NOT NULL CONSTRAINT [DF_DataTabe_Id] DEFAULT NewId(),
[ClientId] [smallint] NOT NULL,
[ProjectId] [int] NOT NULL,
[ResponseValue] [nvarchar](255) NULL,
[ResponseValueXml] xml NULL,
CONSTRAINT [PK_DataTable] PRIMARY KEY CLUSTERED
(
[PartitionKey] ASC
, [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS =ON, ALLOW_PAGE_LOCKS = ON)
ON PS_MySchema(PartitionKey)
) ON PS_MySchema(PartitionKey)
Run Code Online (Sandbox Code Playgroud)
对此的一些说明是,分区键是一个基于 clientId、年份和另一个值的复杂/计算键。分区模式建立在一个分区函数上,该函数将客户 + 日期分组,然后将它们放入单独的文件组(按年份) - 使滑动窗口方法易于管理。
事情的一般流程是在同一个文件组中创建一个工作表,使用alter table将所需的分区从DataTable切换到工作表。对着工作台做一些事情,完成后切换回去。这很好用......直到我在 ResponseValueXml 上添加一个主要的 xml 索引。alter table …