SQL Server でテーブルパーティショニングを実装する際、CREATE PARTITION FUNCTION で指定する RANGE LEFT と RANGE RIGHT の違いを理解することは、データの正確な振り分けにおいて非常に重要です。これらは、定義した境界値(Boundary Value)がどのパーティションに属するかを決定します。
1. RANGE LEFT の動作
RANGE LEFT を指定した場合、境界値はその値以下のグループ、つまり「左側(小さい方)」のパーティションに含まれます。比較演算子としては <= のイメージです。
CREATE PARTITION FUNCTION [PF_Category_Left] (int)
AS RANGE LEFT FOR VALUES (10, 50, 100);
この定義では、以下のような 4 つのパーティションが作成されます。
| パーティション | 範囲の定義 |
|---|---|
| Partition 1 | 値 <= 10 |
| Partition 2 | 値 > 10 AND 値 <= 50 |
| Partition 3 | 値 > 50 AND 値 <= 100 |
| Partition 4 | 値 > 100 |
2. RANGE RIGHT の動作
RANGE RIGHT を指定した場合、境界値はその値以上のグループ、つまり「右側(大きい方)」のパーティションに含まれます。比較演算子としては >= のイメージです。SQL Server では、日付データを扱う際にこの設定がよく使われます。
CREATE PARTITION FUNCTION [PF_Category_Right] (int)
AS RANGE RIGHT FOR VALUES (10, 50, 100);
この定義では、範囲は以下のようになります。
| パーティション | 範囲の定義 |
|---|---|
| Partition 1 | 値 < 10 |
| Partition 2 | 値 >= 10 AND 値 < 50 |
| Partition 3 | 値 >= 50 AND 値 < 100 |
| Partition 4 | 値 >= 100 |
3. 日付データにおける実用例
時間軸でデータをパーティショニングする場合、特定の月の初め(1日 00:00:00)をその月のパーティションに含める必要があるため、RANGE RIGHT を使用するのが一般的です。
以下の例は、2024年の各四半期に基づいてデータを分割する設定です。
CREATE PARTITION FUNCTION [PF_Quarterly_Range] (datetime2)
AS RANGE RIGHT FOR VALUES (
'2024-04-01',
'2024-07-01',
'2024-10-01'
);
この関数を適用したテーブルのデータ分布は次の通りです。
- 第1パーティション: 2024年4月1日より前の全データ
- 第2パーティション: 2024年4月1日 00:00:00 から 2024年6月30日 23:59:59.999... まで
- 第3パーティション: 2024年7月1日 00:00:00 から 2024年9月30日 23:59:59.999... まで
- 第4パーティション: 2024年10月1日 00:00:00 以降の全データ
このように RANGE RIGHT を使うことで、境界値として指定した「月の初日」が、期待通りその月のパーティションの開始点となります。