sql语句在sql server中查询每个表的记录数,占用的空间,索引占用的空间等

sql语句在sql server中查询每个表的记录数,占用的空间,索引占用的空间等

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值