使用2列进行表分区

时间:2011-01-12 16:24:43

标签: sql-server-2008 partitioning

是否可以使用2列对表进行分区而不是仅使用1作为分区函数?

考虑一个包含3列的表

    ID (int, primary key, 
    Date (datetime), 
    Num (int)

我想将此表分为2列:DateNum

这是我使用1列(日期)对表进行分区的方法:

create PARTITION FUNCTION PFN_MonthRange (datetime)
AS
RANGE left FOR VALUES ('2009-11-30 23:59:59:997',
                       '2009-12-31 23:59:59:997',
                       '2010-01-31 23:59:59:997',
                       '2010-28-02 23:59:59:997',
                       '2010-03-31 23:59:59:997')
go

3 个答案:

答案 0 :(得分:40)

坏消息:必须在单个列上定义分区功能。

好消息:这一列可能是persisted computed column,它是您尝试分区的两列的组合。

答案 1 :(得分:14)

我发现这是一个更容易的解决方案

select ROW_NUMBER() over (partition by CHECKSUM(value,ID) order by SortOrder) as Row From your_table

答案 2 :(得分:3)

本机地,您无法在SQL Server中按两列进行分区。

你可以做一些事情,有一个查找表,你用它来提取每个值在哪个仲裁整数(分区),但你最多只有1000个分区,所以他们将开始占用相同的空间。计算列方法遇到同样的问题,你有一个1k的分区限制,很可能你会打击它。

我可能只是坚持一个日期分区,并且在该月的第一天正确范围,而不是在该月的最后一部分左侧。

您打算从第二个分区值获得什么?