当前位置:  开发笔记 > 数据库 > 正文

SQL Server中的表和索引大小

如何解决《SQLServer中的表和索引大小》经验,为你挑选了4个好方法。

我们可以有一个SQL查询,它基本上有助于查看SQl Server中的表和索引大小.

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



1> Rob Garrison..:

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



2> devio..:

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


您的脚本只处理架构"dbo"中的表.如果我的数据库中有一个带有'Audit'模式的表,则需要像这样调用sp_spaceused:exec sp_spaceused'Review.Data'.因此,需要修改脚本以向其提供由模式名称(由点分隔)开头的表名,以便从其他模式返回有关表的数据.

3> earthling42..:

在SQL 2012上,在表级获取此信息变得非常简单:

SQL Management Studio - >右键单击Db - > Reports - > Standard Reports - > Disk by table!

请享用



4> Ben R..:
EXEC sp_MSforeachtable @command1="EXEC sp_spaceused '?'"


如果你发布代码,XML或数据样本,**请**在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的"代码示例"按钮(`{}`),以便很好地格式化和语法突出显示它!
推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有