SQL Server查看表占用的空间

本文介绍了一种在SQL Server中统计每个表空间使用情况的方法。通过创建临时表并利用游标遍历所有用户表,执行sp_spaceused存储过程来收集各表的空间数据,包括行数、保留空间、数据空间等,并将原始数据转换为整数类型方便比较。

create table #Data(name varchar(100),row varchar(100),reserved varchar(100),data varchar(100),index_size varchar(100),unused varchar(100))

declare @name varchar(100) declare cur cursor for select name from sysobjects where xtype='u' order by name open cur fetch next from cur into @name while @@fetch_status=0 begin insert into #data exec sp_spaceused @name print @name fetch next from cur into @name end close cur deallocate cur create table #DataNew(name varchar(100),row int,reserved int,data int,index_size int,unused int) insert into #dataNew select name,convert(int,row) as row,convert(int,replace(reserved,'KB','')) as reserved,convert(int,replace(data,'KB','')) as data, convert(int,replace(index_size,'KB','')) as index_size,convert(int,replace(unused,'KB','')) as unused from #data select * from #dataNew order by data desc

SQL Server中,有多种方法可以查看数据库占用空间: - 查看数据库整体大小: ```sql SELECT DB_NAME(database_id) AS [Database Name], [Name] AS [Logical Name], [Physical_Name] AS [Physical Name], ((size * 8) / 1024) AS [Size(MB)] FROM sys.master_files ORDER BY [Size(MB)] DESC; ``` 此脚本通过`sys.master_files`系统视图,将`size`字段乘以8再除以1024,将结果以MB为单位展示数据库的大小,并按大小降序排列,能直观看到各个数据库的占用空间情况[^1]。 - 查看数据库所有及其数据总条数和占用空间: ```sql SELECT OBJECT_NAME(id) 数据, RTRIM(8 * dpages) + 'KB' 占用空间大小, rows 数据总条数 FROM sysindexes WHERE indid = 1 ORDER BY rows DESC, 数据, reserved DESC; ``` 该脚本使用`sysindexes`系统视图,筛选`indid = 1`的数据,将`dpages`乘以8并转换为字符串加上`KB`作为占用空间大小,同时展示数据名称和数据总条数,按数据总条数、数据名称和预留空间降序排列,可了解每个的大致占用情况[^2]。 - 查看数据库中各个数据的大小(占用空间): ```sql CREATE TABLE Data(名 varchar(100),列数 varchar(100),预留空间 varchar(100),数据占用空间 varchar(100),索引占用空间 varchar(100),剩余空间 varchar(100)); ``` 此脚本创建了一个名为`Data`的,用于存储数据的相关信息,包括名、列数、预留空间、数据占用空间、索引占用空间和剩余空间等,后续可将查询到的数据插入该进行进一步分析,不过这里只是创建结构,未涉及具体的查询和插入操作[^3]。 - 查看数据库索引大小: ```sql USE ldtcasedossier; GO SELECT tn.[name] AS [Table name], ix.[name] AS [Index name], SUM(sz.[used_page_count]) * 8 AS [Index size (KB)] FROM sys.dm_db_partition_stats AS sz INNER JOIN sys.indexes AS ix ON sz.[object_id] = ix.[object_id] AND sz.[index_id] = ix.[index_id] INNER JOIN sys.tables tn ON tn.OBJECT_ID = ix.object_id GROUP BY tn.[name], ix.[name] ORDER BY tn.[name]; ``` 该脚本在指定数据库`ldtcasedossier`中,通过`sys.dm_db_partition_stats`、`sys.indexes`和`sys.tables`三个系统视图的连接查询,计算每个的索引大小,将`used_page_count`乘以8得到以KB为单位的索引大小,并按名排序,能清晰了解各索引的占用空间情况[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值