查询数据库各个表的数据大小及数据量

***begin查询数据库各个表里的数据行数

select b.name,a.row_count from sys.dm_db_partition_stats a,
sys.objects b
where a.object_id=b.object_id
and a.index_id<=1
and b.type=‘U’ ORDER BY row_count

****end

先创建表

create table #t(name varchar(255), rows bigint, reserved varchar(20), data varchar(20), index_size varchar(20), unused varchar(20))

exec sp_MSforeachtable “insert into #t exec sp_spaceused ‘?’”

后查各个表的数据大小

select * from #t order by rows desc

二。

select a.name as ‘表名’,b.rows as ‘表数据行数’
from sysobjects a inner join sysindexes b
on a.id = b.id
where a.type = ‘u’
and b.indid in (0,1)
–and a.name not like ‘t%’
order by b.rows desc

三.利用sys.dm_db_partition_stats,Sql命令如下:查找行数,这个速度最快

select b.name,a.row_count from sys.dm_db_partition_stats a,
sys.objects b
where a.object_id=b.object_id
and a.index_id<=1
and b.type=‘U’ ORDER BY row_count

sys.dm_db_partition_stats它返回当前数据库中每个分区的页和行计数信息,在上面的sql中,三个关键列的意思如下:
object_id:表或者索引视图的ID,所以可以用它与sys.objects表的object_id相匹配。
row_count:该表或索引视图中数据的数量,就是我们要查询的结果。
index_id:该表或索引视图的索引ID。 如果该表没有索引,那么会在sys.dm_db_partition_stats中存在一行index_id=0的记录,如果有一个聚集索引(而且一个表中也只能有一个聚集索引),那么在sys.dm_db_partition_stats中存在一行index_id=1的记录,而对应的index_id=0的记录没有了。如果这个表在sys.dm_db_partition_stats中存在多行index_id >1的记录,则说明这个表存在多个非聚集索引,我们这里判断index_id<=1,是假定每个表都有主键,且主键为聚集索引。配合sys.objects表的type=‘U’,就可以查出每个用户表的数据数量了。

sys.dm_db_partition_stats其它行的信息,大家可以查询msdn帮助文档

四。查出各表大小及行数

set nocount on
create table #t1
(
name varchar(200),
rows int,
reserved varchar(50),
data varchar(50),
index_size varchar(50),
unused varchar(50)
)
declare @tablename varchar(200)
declare @sql varchar(2000)
declare m_cursor cursor local for select object_name(object_id) from sys.objects where type=‘U’
open m_cursor
fetch next from m_cursor into @tablename
while @@fetch_status=0
begin
set @sql='insert into #t1 exec sp_spaceused '+@tablename
exec(@sql)
fetch next from m_cursor into @tablename
end

close m_cursor
deallocate m_cursor
select * from #t1
drop table #t1

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值