使用 2 列进行表分区

问题描述 投票:0回答:3

是否可以使用 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
sql-server partitioning
3个回答
53
投票

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

好消息:该单列可能是一个持久计算列,它是您尝试分区的两列的组合。


6
投票

我发现这是一个更简单的解决方案

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

4
投票

本质上,你不能在 SQL Server 中按两列进行分区。

您可以做一些事情,有一个查找表,用于提取每个值所在的任意整数(分区),但您最多只有 1000 个分区,因此它们将开始占用相同的空间。计算列方法也遇到同样的问题,你有 1k 分区限制,很可能你会搞砸。

我可能会坚持使用日期分区,并在该月的第一天向右排列,而不是在该月的最后一部分向左排列。

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

© www.soinside.com 2019 - 2024. All rights reserved.