【发布时间】:2015-01-27 01:52:24
【问题描述】:
所以我最近开始为一个老客户工作。他们有一个现有的数据库,他们希望我在他们的开发数据库中设置一个分区方案,以便他们可以看到它对性能的影响。 (他们相信通过将旧数据移动到另一个分区来“归档”旧数据会提高性能。根据我的分析,我不相信性能会以任何显着的方式提高。但他们希望我继续前进,无论如何。 ) 所以我遇到了TableA 和TableB 具有多对多关系的情况。它们之间的 Join 表,我们将调用 TableJ。
TableA 在uniqueidentifier 列上有一个聚集主键。所以TableJ 有一个引用TableA.IDColumn 的外键约束。
所以这是我的困境...为了在分区列上对TableA 进行分区(我们将其称为PartCol)PartCol 需要包含在聚集索引中。我的计划是删除IDColumn 上的聚集主键并用PartCol 和IDColumn 上的非聚集主键替换它,然后在PartCol 上创建聚集索引以建立水平分区。为了做到这一切,我必须删除引用TableA.IDColumn 的外键,然后在完成后重新创建它们。但是当我尝试重新创建 FK 约束时,我收到如下错误:
Msg 1776, Level 16, State 0, Line 1 没有主要或候选 引用表“MySchema.TableA”中与 引用外键“FK_TableJ_TableA”中的列列表。
这是有道理的,因为我的密钥不再被定义为在 IDColumn 上是唯一的。由于分区的工作方式,我不能有一个不包括分区列的唯一约束。但如果是这种情况,那么我如何支持具有 M 对 M 关系的表,例如这些?在我看来,这将是一个普遍的问题。所以我猜有一个我忽略的解决方案。
谢谢,提前。
附加说明,以防人们需要知道:这些表中最大的有 20M+ 记录。不是大到需要实现分区,但也不是小到可以立即断定这是不明智的。另外,我有大约 20 个表,我将尝试在这些表上实现分区。这是针对 SQL Server 2008 R2 的。
【问题讨论】:
标签: sql-server-2008 foreign-keys partitioning