SQL Server パーティション関数における RANGE LEFT と RANGE RIGHT の動作比較

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 を使うことで、境界値として指定した「月の初日」が、期待通りその月のパーティションの開始点となります。

タグ: SQL Server T-SQL Database Partitioning Database Design

9月24日 01:21 投稿