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

***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 

 

查询数据库各个表的数据大小及数据量_第1张图片

****end

 

 

 

查询数据库各个表的数据大小及数据量_第2张图片

 

先创建表

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

 

二。

查询数据库各个表的数据大小及数据量_第3张图片

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

你可能感兴趣的:(数据库)