sql >> データベース >  >> RDS >> Sqlserver

SQL Server(T-SQL)の特定のパーティションからすべての行を返す

    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の推奨事項に準拠しています。


    1. カスケード削除の影響を受けるテーブルを一覧表示する方法

    2. DjangoAutoFieldの開始値を変更する

    3. PostgreSQL13でのUnicode正規化

    4. データベース設計:1つの巨大なテーブルまたは個別のテーブル?