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

テーブルがSQLServer(T-SQL)でパーティション化されているかどうかを確認する

    テーブルがSQLServerでパーティション化されているかどうかを確認する必要がある場合は、sys.tablesに対して結合を実行できます。 、sys.indexes 、およびsys.partition_schemes ビュー。

    実例を示します。

    SELECT
        t.name AS [Table],
        i.name AS [Index],
        i.type_desc,
        i.is_primary_key,
        ps.name AS [Partition Scheme]
    FROM sys.tables t
    INNER JOIN sys.indexes i
        ON t.object_id = i.object_id
        AND i.type IN (0,1)
    INNER JOIN sys.partition_schemes ps   
        ON i.data_space_id = ps.data_space_id
    WHERE t.name = 'Movies';

    結果:

    +---------+------------------------------+-------------+------------------+-----------------------+
    | Table   | Index                        | type_desc   | is_primary_key   | Partition Scheme      |
    |---------+------------------------------+-------------+------------------+-----------------------|
    | Movies  | PK__Movies__4BD2941AD44D2FCF | CLUSTERED   | 1                | MoviesPartitionScheme |
    +---------+------------------------------+-------------+------------------+-----------------------+

    ここでも垂直出力を使用しています(横にスクロールする必要がないように):

    Table            | Movies
    Index            | PK__Movies__4BD2941AD44D2FCF
    type_desc        | CLUSTERED
    is_primary_key   | 1
    Partition Scheme | MoviesPartitionScheme

    実際の列のごく一部のみを返しますが、興味のある列を自由に返してください。

    また、最後の行を削除して、すべてのパーティションテーブルを返すこともできます。

    SELECT
        t.name AS [Table],
        i.name AS [Index],
        i.type_desc,
        i.is_primary_key,
        ps.name AS [Partition Scheme]
    FROM sys.tables t
    INNER JOIN sys.indexes i
        ON t.object_id = i.object_id
        AND i.type IN (0,1)
    INNER JOIN sys.partition_schemes ps   
        ON i.data_space_id = ps.data_space_id;

    結果:

    +---------+------------------------------+-------------+------------------+-----------------------+
    | Table   | Index                        | type_desc   | is_primary_key   | Partition Scheme      |
    |---------+------------------------------+-------------+------------------+-----------------------|
    | Movies  | PK__Movies__4BD2941AD44D2FCF | CLUSTERED   | 1                | MoviesPartitionScheme |
    +---------+------------------------------+-------------+------------------+-----------------------+

    私の場合、データベースにはパーティション化されたテーブルが1つだけあります。

    明確にするために、これは明示的にパーティション化されたテーブルのみを返します。

    パーティションを返す

    sys.partitionsなどの他のビューをクエリすることもできます およびsys.dm_db_partition_stats 各テーブルのパーティションのリストを返します。

    これらのビューは両方とも、明示的にパーティション化されていない(つまり、パーティションが1つしかない)テーブルも返すことに注意してください。 SQL Serverでは、明示的にパーティション化されていないテーブルとビューには、パーティション(partition_number)があります。 =1)。

    これがsys.dm_db_partition_statsの例です :

    SELECT 
        partition_number,
        row_count
    FROM sys.dm_db_partition_stats
    WHERE object_id = OBJECT_ID('Movies');

    結果:

    +--------------------+-------------+
    | partition_number   | row_count   |
    |--------------------+-------------|
    | 1                  | 0           |
    | 2                  | 100         |
    | 3                  | 3979        |
    | 4                  | 0           |
    +--------------------+-------------+

    これは、パーティション化されていないテーブルのパーティション情報を返す例です。

    SELECT 
        partition_number,
        row_count
    FROM sys.dm_db_partition_stats
    WHERE object_id = OBJECT_ID('Cats');

    結果:

    +--------------------+-------------+
    | partition_number   | row_count   |
    |--------------------+-------------|
    | 1                  | 3           |
    +--------------------+-------------+

    前述のように、まだ1つのパーティションがあり、そのpartition_number 1です 。


    1. PostgreSQL:結果のデータをSQLクエリからExcel/CSVにエクスポートします

    2. Prismaの使い方

    3. プライマリインデックスの番号を付け直す方法

    4. UPDATEステートメントの影響を受ける行数を返します