web-dev-qa-db-ja.com

2列を使用したテーブルのパーティション分割

パーティション関数に1つだけではなく2つの列を使用してテーブルをパーティション化することは可能ですか?

3列のテーブルを考えてみましょう

 ID(int、主キー、
日付(datetime)、
 Num(int)

このテーブルをDateNumの2列で分割したいと思います。

これは、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
17
Rafael Colucci

Bad News:パーティション関数は単一の列で定義する必要があります。

グッドニュース:その単一の列は 永続的な計算列 になる可能性があります=これは、2つの列を組み合わせたものですパーティション。

42
Joe Stefanelli

私はこれがより簡単な解決策であることを発見しました

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

本来、SQL Serverの2つの列でパーティション化することはできません。

できることはいくつかあります。各値がどの任意整数(パーティション)であるかを抽出するために使用するルックアップテーブルを用意しますが、最大パーティション数は1000だけなので、同じスペースを占有し始めます。計算された列のアプローチには、これと同じ問題があり、1kのパーティション制限があり、それを超える可能性があります。

私はおそらく日付のパーティションに固執し、月の最後の部分ではなく、月の最初の日に範囲を設定します。

2番目のパーティション値から何を得るつもりですか?

3
Andrew