Welcome

首页 / 数据库 / SQLServer / SQL Server游标运用:查看一个数据库所有表大小信息

SQL Server游标运用:查看一个数据库所有表大小信息2014-08-08一、背景

在性能调优或者需要了解某数据库表信息的时候,最直观的方式就是罗列出这个数据所有表的信息,这些信息包括:表的记录数、数据记录占用空间、索引占用空间、未使用的空间等(如Figure1所示),有了这些信息你可以简单的判断这个数据库来自数据上的压力可能是某个表造成的。因为表数据越大,对数据库性能的影响越大。

要实现某个数据库所有表的信息,可以通过游标的形式获取相应的数据,下图Figure1返回某数据库中所有表的信息:

(Figure1:某数据库所有表信息)

也许你并不满足于Figure1的信息,你希望获取整个数据库实例中所有数据库所有表的信息(如Figure2所示),如果想了解里面的实现可以参考:SQL Server 查看所有数据库所有表大小信息(Sizes of All Tables in All Database)

(Figure2:所有数据库所有表信息)

二、实现

首先定义一个临时表变量@tablespaceinfo用于保存表的信息,使用游标读取sys.tables中的表名称,再通过sp_spaceused获取这个表的相关数据插入到临时表变量@tablespaceinfo。下面是SQL脚本的实现,效果就如Figure1所示:

--Script1:--查看某数据库所有表的信息DECLARE @tablespaceinfo TABLE ([name] SYSNAME,[rows] BIGINT,[reserved] VARCHAR(100),[data] VARCHAR(100),[index_size] VARCHAR(100),[unused] VARCHAR(100)) DECLARE @tablename VARCHAR(255); DECLARE Info_cursor CURSOR FORSELECT "["+[name]+"]" FROM sys.tables WHERE TYPE="U"; OPEN Info_cursorFETCH NEXT FROM Info_cursor INTO @tablename WHILE @@FETCH_STATUS = 0BEGININSERT INTO @tablespaceinfo EXEC sp_spaceused @tablename FETCH NEXT FROM Info_cursor INTO @tablenameEND CLOSE Info_cursorDEALLOCATE Info_cursor SELECT * FROM @tablespaceinfoORDER BY Cast(Replace(reserved,"KB","") AS INT) DESC