以前にSQLServerでパーティションテーブルを作成し、各パーティションに格納されている行数を知りたい場合は、次の3つのクエリを使用できます。
特に、次のことができます。
-
sys.dm_db_partition_stats
をクエリします 表示 -
sys.partitions
にクエリを実行します 表示 -
$PARTITION
を使用します クエリで機能する
以下は3つすべての例です。
sys.dm_db_partition_stats
sys.dm_db_partition_stats
システム動的管理ビューは、現在のデータベース内のすべてのパーティションのページ数と行数の情報を返します。
Movies
というパーティションテーブルの行数を返す例を次に示します。 。
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 | +--------------------+-------------+
この場合、最初と最後のパーティションは空です(Microsoftが推奨)。
sys.partitions
sys.partitions
システムカタログビューには、データベース内のすべてのテーブルとほとんどのタイプのインデックスの各パーティションの行が含まれています。
これを使用して、前の例と同じデータを返す方法は次のとおりです。
SELECT
partition_number,
rows
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');
結果:
+--------------------+--------+ | partition_number | rows | |--------------------+--------| | 1 | 0 | | 2 | 100 | | 3 | 3979 | | 4 | 0 | +--------------------+--------+
これは前のクエリとほとんど同じであることに気付くかもしれません。唯一の違いは、これはrows
という列を使用することです。 、前のものはrow_count
という列を使用していました 。
$PARTITIONS
$PARTITIONS
system関数は、指定されたパーティション関数のパーティション列値のセットがマップされるパーティション番号を返します。
したがって、この情報を使用して、行数データを返すクエリを作成できます。
SELECT
$PARTITION.MoviesPartitionFunction(MovieId) AS [Partition Number],
COUNT(*) AS [Number of Rows]
FROM Movies
GROUP BY $PARTITION.MoviesPartitionFunction(MovieId)
ORDER BY [Partition Number] ASC
結果:
+--------------------+------------------+ | Partition Number | Number of Rows | |--------------------+------------------| | 2 | 100 | | 3 | 3979 | +--------------------+------------------+
この例の結果との唯一の違いは、空でない行の数のみを返すことです。