"Table and Index size in SQL Server"的意思是SQL Server中的表和索引大小。

15 浏览
0 Comments

"Table and Index size in SQL Server"的意思是SQL Server中的表和索引大小。

我们能否有一个SQL查询,可以帮助在SQL Server中查看表格和索引的大小。

SQL Server如何维护表格/索引的内存使用情况?

admin 更改状态以发布 2023年5月22日
0
0 Comments

不带参数的 exec sp_spaceused 显示整个数据库的汇总信息。使用foreachtable解决方案,每个表生成一个结果集-如果你有太多的表,SSMS可能无法处理。

我创建了一个脚本,通过 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

0
0 Comments

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%以内。

0