SQL Serverでパーティションテーブルを作成するときは、各パーティションに入れる値を指定します。
これは、パーティション関数を作成するときに行われます。パーティション関数を作成するときは、境界値を指定します。これにより、各パーティションに入る値が決まります。
パーティションテーブルを作成し、データを挿入したら、通常のSELECT
を実行できます。 パーティション化されていないテーブルの場合と同じように、データを返すステートメント(実際には、パーティション化されていないテーブルでも1つのパーティションがあります)。
しかし、データが必要なパーティションを指定することもできることをご存知ですか?
$PARTITION
を使用してこれを行うことができます WHERE
のシステム機能 句。
例
次のデータを含むパーティションテーブルがあるとします。
+---------+-------------+ | CatId | CatName | |---------+-------------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | | 4 | Bulldog | | 5 | King George | | 6 | Sharp | | 7 | Fritz | | 8 | Garfield | | 9 | Boss | +---------+-------------+
そしてCatId
パーティション列です。
そして、次のパーティション関数を使用してパーティションを作成しました。
CREATE PARTITION FUNCTION CatsPartitionFunction (int)
AS RANGE LEFT FOR VALUES (-1, 5, 100);
これにより、パーティショニング列の値に応じて、データがどのように保存されるかがわかります。
これで、特定のパーティションからのデータのみを返すクエリを実行できます。
2番目のパーティションからデータを返す
2番目のパーティションからすべての行を返す方法は次のとおりです。
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 2;
結果:
+---------+-------------+ | CatId | CatName | |---------+-------------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | | 4 | Bulldog | | 5 | King George | +---------+-------------+
3番目のパーティションからデータを返す
そして、これが3番目のパーティションからのすべてのデータです。
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 3;
結果:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 6 | Sharp | | 7 | Fritz | | 8 | Garfield | | 9 | Boss | +---------+-----------+
最初と最後のパーティションからデータを返す
この場合、CatId
に負の値がないため、最初のパーティションは空です。 桁。
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 1;
結果:
(0 rows affected)
同様に、最後のパーティションも空です。これは、そのパーティションにデータを入力するのに十分な行がないためです。
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 4;
結果:
(0 rows affected)
これは、将来パーティションが分割またはマージされた場合にデータが移動しないようにするために、最初と最後のパーティションを空のままにするというMicrosoftの推奨事項に準拠しています。