我们可以有一个SQL查询,这将基本上有助于查看表和索引的大小在SQl服务器。
SQL server如何维护表/索引的内存使用?
发布于 2008-11-25 10:38:25
不带参数的exec sp_spaceused
显示整个数据库的摘要。foreachtable解决方案为每个表生成一个结果集-如果表太多,SSMS可能无法处理该结果集。
我创建了一个script,它通过sp_spaceused
收集表格信息,并在单个记录集中显示摘要,按大小排序。
create table #t
(
name nvarchar(128),
rows varchar(50),
reserved varchar(50),
data varchar(50),
index_size varchar(50),
unused varchar(50)
)
declare @id nvarchar(128)
declare c cursor for
select '[' + sc.name + '].[' + s.name + ']' FROM sysobjects s INNER JOIN sys.schemas sc ON s.uid = sc.schema_id where s.xtype='U'
open c
fetch c into @id
while @@fetch_status = 0 begin
insert into #t
exec sp_spaceused @id
fetch c into @id
end
close c
deallocate c
select * from #t
order by convert(int, substring(data, 1, len(data)-3)) desc
drop table #t
发布于 2009-03-11 16:04:02
sp_spaceused给出了所有索引的总和。
如果需要表的每个索引的大小,请使用以下两个查询之一:
SELECT
i.name AS IndexName,
SUM(s.used_page_count) * 8 AS IndexSizeKB
FROM sys.dm_db_partition_stats AS s
JOIN sys.indexes AS i
ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id
WHERE s.[object_id] = object_id('dbo.TableName')
GROUP BY i.name
ORDER BY i.name
SELECT
i.name AS IndexName,
SUM(page_count * 8) AS IndexSizeKB
FROM sys.dm_db_index_physical_stats(
db_id(), object_id('dbo.TableName'), NULL, NULL, 'DETAILED') AS s
JOIN sys.indexes AS i
ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id
GROUP BY i.name
ORDER BY i.name
结果通常略有不同,但在1%以内。
发布于 2015-01-08 21:44:37
在SQL 2012上,在表级获取此信息已变得非常简单:
SQL Management Studio ->右键单击Db -> Reports -> -> Reports -> Disk usage by table!
尽情享受
https://stackoverflow.com/questions/316831
复制相似问题