程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server游標運用:查看一個數據庫所有表大小信息

SQL Server游標運用:查看一個數據庫所有表大小信息

編輯:關於SqlServer

一、背景

在性能調優或者需要了解某數據庫表信息的時候,最直觀的方式就是羅列出這個數據所有表的信息,這些信息包括:表的記錄數、數據記錄占用空間、索引占用空間、未使用的空間等(如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 FOR
    SELECT '['+[name]+']' FROM sys.tables WHERE TYPE='U';
     
OPEN Info_cursor
FETCH NEXT FROM Info_cursor INTO @tablename
     
WHILE @@FETCH_STATUS = 0
BEGIN
    INSERT INTO @tablespaceinfo EXEC sp_spaceused @tablename
         
    FETCH NEXT FROM Info_cursor INTO @tablename
END
     
CLOSE Info_cursor
DEALLOCATE Info_cursor
     
SELECT * FROM @tablespaceinfo
    ORDER BY Cast(Replace(reserved,'KB','') AS INT) DESC

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved