加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

怎样查看数据库的表占用空间,方法有几种

发布时间:2023-06-03 14:01:42 所属栏目:MsSql教程 来源:
导读:这篇文章主要讲解了“如何查看数据库的表占用空间,方法有几种”,文中的讲解内容简单、清晰、详细,对大家学习或是工作可能会有一定的帮助,希望大家阅读完这篇文章能有所收获。下面就请大家跟着小编的思
这篇文章主要讲解了“如何查看数据库的表占用空间,方法有几种”,文中的讲解内容简单、清晰、详细,对大家学习或是工作可能会有一定的帮助,希望大家阅读完这篇文章能有所收获。下面就请大家跟着小编的思路一起来学习一下吧。
 
查看MSSQL数据库每个表占用的空间大小
 
sp_spaceused
 
显示行数、保留的磁盘空间以及当前数据库中的表所使用的磁盘空间,或显示由整个数据库保留和使用的磁盘空间。
 
语法
 
sp_spaceused [[@objname =] 'objname']
 
    [,[@updateusage =] 'updateusage']
 
参数
 
[@objname =] 'objname'
 
是为其请求空间使用信息(保留和已分配的空间)的表名。objname 的数据类型是 nvarchar(776),默认设置为 NULL。
 
[@updateusage =] 'updateusage'
 
表示应在数据库内(未指定 objname 时)还是在特定的对象上(指定 objname 时)运行 DBCC UPDATEUSAGE。值可以是 true 或 false。updateusage 的数据类型是 varchar(5),默认设置为 FALSE。
 
返回代码值
 
0(成功)或 1(失败)
 
示例
 
A. 有关表的空间信息
 
下例报告为 titles 表分配(保留)的空间量、数据使用的空间量、索引使用的空间量以及由数据库对象保留的未用空间量。
 
USE pubs
 
EXEC sp_spaceused 'titles'
 
B. 有关整个数据库的已更新空间信息
 
下例概括当前数据库使用的空间并使用可选参数 @updateusage。
 
USE pubs
 
sp_spaceused @updateusage = 'TRUE'
 
不过此方法,只能查看一个表的大小,一个数据库中一般会有多个表,如何一次性查看某数据库的所有表大小呢?
 
第一种方法(较简单,看的有些吃力):
 
exec sp_MSforeachtable "exec sp_spaceused '?'"
 
第二种方法(较复杂,但看的比较清楚,原作者不详):
 
if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tablespaceinfo]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
 
create table tablespaceinfo --创建结果存储表
 
(nameinfo varchar(50) ,
 
rowsinfo int , reserved varchar(20) ,
 
datainfo varchar(20) ,
 
index_size varchar(20) ,
 
unused varchar(20) )
 
delete from tablespaceinfo --清空数据表
 
declare @tablename varchar(255) --表名称
 
declare @cmdsql varchar(500)
 
DECLARE Info_cursor CURSOR FOR
 
select o.name
 
from dbo.sysobjects o where OBJECTPROPERTY(o.id, N'IsTable') = 1
 
and o.name not like N'#%%' order by o.name
 
OPEN Info_cursor
 
FETCH NEXT FROM Info_cursor
 
INTO @tablename
 
WHILE @@FETCH_STATUS = 0
 
BEGIN
 
if exists (select * from dbo.sysobjects where id = object_id(@tablename) and OBJECTPROPERTY(id, N'IsUserTable') = 1)
 
execute sp_executesql
 
N'insert into tablespaceinfo exec sp_spaceused @tbname',
 
N'@tbname varchar(255)',
 
@tbname = @tablename
 
FETCH NEXT FROM Info_cursor
 
INTO @tablename
 
END
 
CLOSE Info_cursor
 
DEALLOCATE Info_cursor
 
GO
 
--itlearner注:显示数据库信息
 
sp_spaceused @updateusage = 'TRUE'
 
--itlearner注:显示表信息
 
select *
 
from tablespaceinfo
 
order by cast(left(ltrim(rtrim(reserved)) , len(ltrim(rtrim(reserved)))-2) as int) desc
 
第三种方法:
 
select object_name(id) tablename,8*reserved/1024 reserved,rtrim(8*dpages/1024)+'Mb' used,8*(reserved-dpages)/1024 unused,8*dpages/1024-rows/1024*minlen/1024 free,
 
rows,* from sysindexes
 
where indid=1
 
order by reserved desc
 
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章