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
SELECT sc.name + '.' + t.NAME AS TableName,
p.[Rows],
( SUM(a.total_pages) * 8 ) / 1024 AS TotalReservedSpaceMB, -- Number of total pages * 8KB size of each page in SQL Server
( SUM(a.used_pages) * 8 ) / 1024 AS UsedDataSpaceMB,
( SUM(a.data_pages) * 8 ) / 1024 AS FreeUnusedSpaceMB
FROM msdb.sys.tables t
INNER JOIN msdb.sys.schemas sc ON sc.schema_id = t.schema_id
INNER JOIN msdb.sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN msdb.sys.partitions p ON i.object_id = p.OBJECT_ID
AND i.index_id = p.index_id
INNER JOIN msdb.sys.allocation_units a ON p.partition_id = a.container_id
WHERE t.type_desc = 'USER_TABLE'
AND i.index_id <= 1 --- Heap\ CLUSTERED
AND t.NAME='MYTableName' -- Replace with valid table name
GROUP BY sc.name + '.' + t.NAME,
i.[object_id],i.index_id, i.name, p.[Rows]
ORDER BY ( SUM(a.total_pages) * 8 ) / 1024 DESC
如果您不想编写脚本,也可以在 SSMS(快捷键 F7)中打开未充分利用的“对象资源管理器详细信息”。
从顶层打开 Tables 文件夹以获取数据库中所有表的列表。
您可能需要自定义列以查看已用空间。这可以通过右键单击标题行并选择要显示的列来完成。
对象资源管理器详细信息中有更多类似的数据可用。
对于单表,您可以使用
sp_msforeachtable
对于数据库中的所有表,您可以按照以下方式使用它在 SSMS 中右键单击 Database,选择 Reports、Standard Reports、Disk Usage by Top Tables。
该报告将为您提供每个表使用的行数和千字节数。
要获取表格大小信息,我喜欢使用以下脚本
您可以使用以下脚本来计算每个表的体积和每个数据库总数的另一个结果集
看看 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 ) 也将提供表大小信息。
转到数据库,然后右键单击并单击报告,然后单击标准报告,然后按表单击磁盘使用情况。这将为您提供该数据库中的所有故事及其记录、数据、索引等