是否可以使用 2 列而不是仅 1 列的分区函数来对表进行分区?
考虑一个有 3 列的表格
ID(整数,主键, 日期(日期时间), 数字(整数)
我想将此表划分为 2 列:
Date
和 Num
。
这就是我使用 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
坏消息: 分区函数必须在单个列上定义。
好消息:该单列可能是一个持久计算列,它是您尝试分区的两列的组合。
我发现这是一个更简单的解决方案
select ROW_NUMBER() over (partition by CHECKSUM(value,ID) order by SortOrder) as Row From your_table
本质上,你不能在 SQL Server 中按两列进行分区。
您可以做一些事情,有一个查找表,用于提取每个值所在的任意整数(分区),但您最多只有 1000 个分区,因此它们将开始占用相同的空间。计算列方法也遇到同样的问题,你有 1k 分区限制,很可能你会搞砸。
我可能会坚持使用日期分区,并在该月的第一天向右排列,而不是在该月的最后一部分向左排列。
您打算从第二个分区值中获得什么?