SQL ServerデータベースのMyTable
のサイズに関する情報を取得するのに便利な組み込み関数/ストアドプロシージャ/クエリはありますか?
シングルテーブルの場合は
sp_spaceused MyTable
データベース内のすべてのテーブルに対しては、以下のように sp_msforeachtable
と組み合わせて使用できます。
CREATE TABLE #temp (
table_name sysname ,
row_count INT,
reserved_size VARCHAR(50),
data_size VARCHAR(50),
index_size VARCHAR(50),
unused_size VARCHAR(50))
SET NOCOUNT ON
INSERT #temp
EXEC sp_msforeachtable 'sp_spaceused ''?'''
SELECT a.table_name,
a.row_count,
COUNT(*) AS col_count,
a.data_size
FROM #temp a
INNER JOIN information_schema.columns b
ON a.table_name collate database_default
= b.table_name collate database_default
GROUP BY a.table_name, a.row_count, a.data_size
ORDER BY CAST(REPLACE(a.data_size, ' KB', '') AS integer) DESC
DROP TABLE #temp
SSMSで[データベース]を右クリックし、[レポート]、[標準レポート]、[トップテーブルのディスク使用量]を選択します。
このレポートでは、テーブルごとの行数と使用されたキロバイトが表示されます。
sys.dm_db_partition_stats (http://msdn.microsoft.com/en-us/library/ms187737.aspx)を見てみましょう。
このリンクにはいくつかのサンプルクエリがありますし、http://blogs.msdn.com/b/cindygross/archive/2010/04/02/dmv-series-sys-dm-db-partition-stats.aspx にもあります。
非クラスタ化インデックスのフィルタリングを行うなど、必要に応じて変更することができます。ページ数を 8 倍して KB 単位のサイズを得て、必要に応じて 2^10 (=1024) で割って MB に変換します。
sp_spaceused (http://msdn.microsoft.com/en-us/library/ms188776.aspx)でもテーブルサイズの情報が得られます。