是否有任何内置函数/存储过程/查询可以帮助检索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) 也会给出表的大小信息。