テーブルが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
です 。