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

SQL Server(T-SQL)のパーティションテーブルの境界値を取得する

    SQL Serverでは、sys.partition_range_valuesを使用できます。 パーティション化されたテーブルに使用される境界値を見つけるためのシステムカタログビュー。

    ただし、function_idを知っている必要があります そのビューを使用する前に、パーティション関数の

    ただし、いつものように、他の多数のテーブルに対して結合を実行して、必要な情報を取得できます。

    sys.partition_range_values

    まず、sys.partition_range_valuesの列を見てみましょう。 ビューが戻ります。

     SELECT * FROM sys.partition_range_values;

    結果:

    +---------------+---------------+----------------+---------+
    | function_id   | boundary_id   | parameter_id   | value   |
    |---------------+---------------+----------------+---------|
    | 65542         | 1             | 1              | -1      |
    | 65542         | 2             | 1              | 100     |
    | 65542         | 3             | 1              | 10000   |
    +---------------+---------------+----------------+---------+

    幸いなことに、このデータベースにはパーティション化されたテーブルが1つしかないため、結果に煩わされることはありません。

    前述のように、このビューはfunction_idを返します 、それを使用して他のテーブルの束を結合し、特定のテーブルのデータを返すことができます。

    私の場合、パーティション化されたテーブルが1つしかないため、これは不要ですが、パーティション化されたヒープとインデックスが大量にあり、それを絞り込みたいと仮定します。

    テーブルに絞り込みます

    Moviesという特定のテーブルの境界範囲を返す例を次に示します。 。

    SELECT 
        p.partition_number,
        r.boundary_id, 
        r.value AS [Boundary Value]   
    FROM sys.tables AS t  
    JOIN sys.indexes AS i  
        ON t.object_id = i.object_id  
    JOIN sys.partitions AS p
        ON i.object_id = p.object_id AND i.index_id = p.index_id   
    JOIN  sys.partition_schemes AS s   
        ON i.data_space_id = s.data_space_id  
    JOIN sys.partition_functions AS f   
        ON s.function_id = f.function_id  
    LEFT JOIN sys.partition_range_values AS r   
        ON f.function_id = r.function_id and r.boundary_id = p.partition_number  
    WHERE i.type <= 1 AND t.name = 'Movies' 
    ORDER BY p.partition_number ASC;

    結果:

    +--------------------+---------------+------------------+
    | partition_number   | boundary_id   | Boundary Value   |
    |--------------------+---------------+------------------|
    | 1                  | 1             | -1               |
    | 2                  | 2             | 100              |
    | 3                  | 3             | 10000            |
    | 4                  | NULL          | NULL             |
    +--------------------+---------------+------------------+

    ここでも同じですが、選択リストを拡張して、インデックス名、パーティション関数の名前などの他の情報を含めます。

     SELECT 
        t.name AS [Table], 
        i.name AS [Index], 
        p.partition_number,
        f.name,
        r.boundary_id, 
        r.value AS [Boundary Value]   
    FROM sys.tables AS t  
    JOIN sys.indexes AS i  
        ON t.object_id = i.object_id  
    JOIN sys.partitions AS p
        ON i.object_id = p.object_id AND i.index_id = p.index_id   
    JOIN  sys.partition_schemes AS s   
        ON i.data_space_id = s.data_space_id  
    JOIN sys.partition_functions AS f   
        ON s.function_id = f.function_id  
    LEFT JOIN sys.partition_range_values AS r   
        ON f.function_id = r.function_id and r.boundary_id = p.partition_number  
    WHERE i.type <= 1 AND t.name = 'Movies' 
    ORDER BY p.partition_number ASC;

    結果:

    +---------+------------------------------+--------------------+-------------------------+---------------+------------------+
    | Table   | Index                        | partition_number   | name                    | boundary_id   | Boundary Value   |
    |---------+------------------------------+--------------------+-------------------------+---------------+------------------|
    | Movies  | PK__Movies__4BD2941AD44D2FCF | 1                  | MoviesPartitionFunction | 1             | -1               |
    | Movies  | PK__Movies__4BD2941AD44D2FCF | 2                  | MoviesPartitionFunction | 2             | 100              |
    | Movies  | PK__Movies__4BD2941AD44D2FCF | 3                  | MoviesPartitionFunction | 3             | 10000            |
    | Movies  | PK__Movies__4BD2941AD44D2FCF | 4                  | MoviesPartitionFunction | NULL          | NULL             |
    +---------+------------------------------+--------------------+-------------------------+---------------+------------------+

    垂直出力を使用した結果は次のとおりです(横にスクロールする必要はありません):

    -[ RECORD 1 ]-------------------------
    Table            | Movies
    Index            | PK__Movies__4BD2941AD44D2FCF
    partition_number | 1
    name             | MoviesPartitionFunction
    boundary_id      | 1
    Boundary Value   | -1
    -[ RECORD 2 ]-------------------------
    Table            | Movies
    Index            | PK__Movies__4BD2941AD44D2FCF
    partition_number | 2
    name             | MoviesPartitionFunction
    boundary_id      | 2
    Boundary Value   | 100
    -[ RECORD 3 ]-------------------------
    Table            | Movies
    Index            | PK__Movies__4BD2941AD44D2FCF
    partition_number | 3
    name             | MoviesPartitionFunction
    boundary_id      | 3
    Boundary Value   | 10000
    -[ RECORD 4 ]-------------------------
    Table            | Movies
    Index            | PK__Movies__4BD2941AD44D2FCF
    partition_number | 4
    name             | MoviesPartitionFunction
    boundary_id      | NULL
    Boundary Value   | NULL


    1. ボトル、SQLAlchemy、TwitterAPIを使用したシンプルなWebアプリの構築

    2. Oracleで科学的記数法で数値をフォーマットする方法

    3. 実行方法によっては、Oracleストアドプロシージャの実行時間が大幅に増加するのはなぜですか?

    4. Oracleで複数の行を連結してグループ化する