SQLServer查看各个表大小

复制代码
declare @id int  
declare @type character(2)  
declare @pages  
int  
declare @dbname sysname 
declare @dbsize dec(15,0) 
declare @bytesperpage dec(15,0) 
declare @pagesperMB dec(15,0) 
 
create table #spt_space 
( 
  objid int null, 
  rows int null, 
  reserved dec(15) null, 
  data dec(15) null, 
  indexp dec(15) null, 
  unused dec(15) null 
) 
 
set nocount on 
 
-- Create a cursor to loop through the user   tables 
declare c_tables cursor for 
select id 
from sysobjects 
where xtype = 'U' 
 
open c_tables 
 
fetch next from c_tables 
into @id 
 
while @@fetch_status = 0 
begin 
 
  /* Code from sp_spaceused */ 
  insert into #spt_space (objid, reserved) 
  select objid = @id, sum(reserved) 
  from sysindexes 
  where indid in (0, 1, 255) 
  and id = @id 
 
  select @pages = sum(dpages) 
  from sysindexes 
  where indid < 2 
  and id = @id 
  select @pages = @pages + isnull(sum(used), 0) 
  from sysindexes 
  where indid = 255 
  and id = @id 
  update #spt_space 
  set data = @pages 
  where objid = @id 
 
 
  /* index: sum(used) where indid in (0, 1, 255) - data */ 
  update #spt_space 
  set indexp = (select sum(used) 
  from sysindexes 
  where indid in (0, 1, 255) 
  and id = @id) 
    - data 
  where objid = @id 
 
  /* unused: sum(reserved) - sum(used) where indid in (0, 1, 255) */ 
  update #spt_space 
  set unused = reserved 
  - (select sum(used) 
  from sysindexes 
  where indid in (0, 1, 255) 
  and id = @id) 
  where objid = @id 
 
  update #spt_space 
  set rows = i.rows 
  from sysindexes i 
  where i.indid < 2 
  and i.id = @id 
  and objid = @id 
 
  fetch next from c_tables 
  into @id 
end 
 
select TableName = (select left(name,60) from sysobjects where id = objid), 
  Rows = convert(char(11), rows), 
  ReservedKB = ltrim(str(reserved * d.low / 1024.,15,0) + ' ' + 'KB'), 
  DataKB = ltrim(str(data * d.low / 1024.,15,0) + ' ' + 'KB'), 
  IndexSizeKB = ltrim(str(indexp * d.low / 1024.,15,0) + ' ' + 'KB'), 
  UnusedKB = ltrim(str(unused * d.low / 1024.,15,0) + ' ' + 'KB') 
 
from #spt_space, master.dbo.spt_values d 
where d.number = 1 
and d.type = 'E' 
order by reserved desc  
drop table #spt_space 

close c_tables 
deallocate c_tables
复制代码

 

posted @   Thenext  阅读(777)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示