1

我对如何处理这个有自己的想法,但想看看是否有不同的观点。我遇到的问题是我有以下表格(示例表)

---------------------------------------------------------------------------------------
CREATE TABLE Account
(
    AccountId int identity(1,1),
    CreationDate datetime,
    CONSTRAINT [PK_Account] PRIMARY KEY CLUSTERED 
    (
        [AccountId] ASC
    )WITH (FILLFACTOR = 80) ON [PRIMARY]
) ON [PRIMARY]

CREATE TABLE AccountSales
(
    AccountSalesId int identity(1,1),
    AccountId int,
    CONSTRAINT [PK_AccountSales] PRIMARY KEY CLUSTERED 
    (
       [AccountSalesId] ASC
    )WITH (FILLFACTOR = 80) ON [PRIMARY]
) ON [PRIMARY]

ALTER TABLE [dbo].[AccountSales]  WITH CHECK ADD  CONSTRAINT [FK_AccountSales_Account]    FOREIGN KEY([AccountId])
REFERENCES [dbo].[Account] ([AccountID])
GO

ALTER TABLE [dbo].[AccountSales] CHECK CONSTRAINT [FK_AccountSales_Account]
GO
---------------------------------------------------------------------------------------

假设 Account 表为 500GB,AccountSales 为 1TB。出于明显的原因,我想对这些表进行分区。当前逻辑的工作方式是每天处理数据,因此对 Account 表的日期字段进行分区是有意义的,但是 AccountSales 表没有日期字段。此外,当涉及到 id 和 date 时,两个表中的数据也不是连续的,因为数据是在不同时间从不同服务器加载的。所以like账户可能有以下数据

Id     Date             Server loaded from (not a column - just for display purposes)
--------------------------
1      1/1/2000 00:00     1
2      1/1/2000 01:00     1
3      1/1/2000 02:00     1
4      1/1/2000 00:00     2
5      1/1/2000 01:00     2
6      1/1/2000 0:300     1

我正在考虑只在 CreationDate 上创建聚集索引并将 AccountId 设置为具有唯一 NC 索引的 PK 的 Accounts 表。然后我会在日期上进行分区。

不过,我不能 100% 确定如何处理 AccountSales 表 - 因为如果我通过 id 进行操作,如果与 Account 表连接,日期将无法正确匹配,但是我看不到解决此问题的方法。

有任何想法吗?处理这个问题的最佳方法是什么?如果需要更多信息,请告诉我。谢谢,如果提前!

4

1 回答 1

0

您在评论中说,您的目标是使用分区元数据操作来批量更新数据。这意味着您需要对两个表进行分区,因为您肯定希望它们保持同步。此外,您需要对它们进行分区对齐,以便能够在同一个(快速)事务中切换或删除两者。

因此,我建议您在两个表中都包含分区键。即使其中一个是多余的。

于 2012-07-09T18:15:52.050 回答