SQL Server查看所有表大小、表行數和占用空間信息
阿新 • • 發佈:2018-09-13
add nvarchar 包含 desc cut ack sed dealloc har
一、查看表名和對應的數據行數
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
其實本來只想找一個方法能查詢一下 數據庫 的大小,沒想到這個方法還能查詢數據庫中 各個數據表 的大小,嗯,挺好玩的,記錄一下。
MSDN資料:https://msdn.microsoft.com/zh-cn/library/ms188776.aspx
如果只是查詢數據庫的大小的話,直接使用以下語句即可:
EXEC sp_spaceused
為了保證查詢結果的實時性,推薦使用 @updateusage 參數來確保統計數據是最新的:
EXEC sp_spaceused @updateusage = N‘TRUE‘;
執行完畢後結果是兩個表,第一個表中包含了基本的統計信息,第二個表示更加詳細的數據占用情況。
如果想具體查詢某個表的大小,加上表名即可:
EXEC sp_spaceused ‘spt_values‘
結果很簡單:
(完)
。。。
其實吧,能查一張表,就想怎麽能把數據庫裏的表都查出來。。。
嗯,來一個吧,從網上查到的:
-- =============================================
-- 描 述:更新查詢數據庫中各表的大小,結果存儲到數據表中
-- =============================================
CREATE PROCEDURE [dbo].[sp_UpdateTableSpaceInfo]
AS
BEGIN
--查詢是否存在結果存儲表
IF NOT EXISTS (SELECT * FROM sysobjects where id = OBJECT_ID(N‘temp_tableSpaceInfo‘) AND OBJECTPROPERTY(id, N‘IsUserTable‘) = 1)
BEGIN
--不存在則創建
CREATE TABLE temp_tableSpaceInfo
(name NVARCHAR(128),
rows char(11),
reserved VARCHAR(18),
data VARCHAR(18),
index_size VARCHAR(18),
unused VARCHAR(18))
END
--清空數據表
DELETE FROM temp_tableSpaceInfo
--定義臨時變量在遍歷時存儲表名稱
DECLARE @tablename VARCHAR(255)
--使用遊標讀取數據庫內所有表表名
DECLARE table_list_cursor CURSOR FOR
SELECT name FROM sysobjects
WHERE OBJECTPROPERTY(id, N‘IsTable‘) = 1 AND name NOT LIKE N‘#%%‘ ORDER BY name
--打開遊標
OPEN table_list_cursor
--讀取第一條數據
FETCH NEXT FROM table_list_cursor INTO @tablename
--遍歷查詢到的表名
WHILE @@FETCH_STATUS = 0
BEGIN
--檢查當前表是否為用戶表
IF EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID(@tablename) AND OBJECTPROPERTY(id, N‘IsUserTable‘) = 1)
BEGIN
--當前表則讀取其信息插入到表格中
EXECUTE sp_executesql N‘INSERT INTO temp_tableSpaceInfo EXEC sp_spaceused @tbname‘, N‘@tbname varchar(255)‘, @tbname = @tablename
END
--讀取下一條數據
FETCH NEXT FROM table_list_cursor INTO @tablename
END
--釋放遊標
CLOSE table_list_cursor
DEALLOCATE table_list_cursor
END
GO
用的時候呢,執行一下:
EXEC sp_UpdateTableSpaceInfo
SELECT * FROM temp_tableSpaceInfo
嗯,應該就可以了吧。
SQL Server查看所有表大小、表行數和占用空間信息