我对如何处理这个有自己的想法,但想看看是否有不同的观点。我遇到的问题是我有以下表格(示例表)
---------------------------------------------------------------------------------------
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 表连接,日期将无法正确匹配,但是我看不到解决此问题的方法。
有任何想法吗?处理这个问题的最佳方法是什么?如果需要更多信息,请告诉我。谢谢,如果提前!