您的位置:首页 > 博客中心 > 数据库 >

[笔记] 查询表记录空间占用情况SQL脚本

时间:2022-03-10 17:54

gxlsystem.com,布布扣gxlsystem.com,布布扣

USE ExpressDB

CREATE TABLE #tablespaceinfo
    (
      nameinfo VARCHAR(50) ,
      rowsinfo BIGINT ,
      reserved VARCHAR(20) ,
      datainfo VARCHAR(20) ,
      index_size VARCHAR(20) ,
      unused VARCHAR(20)
    )  
 
--创建游标

DECLARE Info_cursor CURSOR
FOR
    SELECT  ‘[‘ + [name] + ‘]‘
    FROM    sys.tables
    WHERE   type = ‘U‘;  
 
OPEN Info_cursor  

DECLARE @tablename VARCHAR(255);  
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  

 --创建临时表
CREATE TABLE [#tmptb]
    (
      TableName VARCHAR(50) ,
      DataInfo BIGINT , -- 以数据页大小为单位计算,即使表只有一条记录,也会占用一个数据页(8KB)
      RowsInfo BIGINT ,
      SpacePerRow  AS ( CASE RowsInfo
                         WHEN 0 THEN 0
                         --ELSE DataInfo / RowsInfo -- 数据页大小的信息除以记录数。
                         ELSE CAST(DataInfo AS decimal(8,2))/CAST(RowsInfo AS decimal(8,2))
                       END ) PERSISTED
    )

--插入数据到临时表
INSERT  INTO [#tmptb]
        ( [TableName] ,
          [DataInfo] ,
          [RowsInfo]
        )
        SELECT  [nameinfo] ,
                CAST(REPLACE([datainfo], ‘KB‘, ‘‘) AS BIGINT) AS ‘datainfo‘ ,
                [rowsinfo]
        FROM    #tablespaceinfo
        ORDER BY CAST(REPLACE(reserved, ‘KB‘, ‘‘) AS INT) DESC  


--汇总记录
SELECT  [tbspinfo].* ,
        [tmptb].[SpacePerRow] AS ‘每行记录大概占用空间(KB)‘
FROM    [#tablespaceinfo] AS tbspinfo ,
        [#tmptb] AS tmptb
WHERE   [tbspinfo].[nameinfo] = [tmptb].[TableName]
ORDER BY CAST(REPLACE([tbspinfo].[reserved], ‘KB‘, ‘‘) AS INT) DESC  


DROP TABLE [#tablespaceinfo]
DROP TABLE [#tmptb]
View Code

当表的记录数少的时候,统计出来的每行记录占用空间是不准确的。

SELECT AVG(DATALENGTH(C0))+AVG(DATALENGTH(C1))+AVG(DATALENGTH(C2))+AVG(DATALENGTH(C3)) FROM [dbo].[TableName]
用统计字段大小方法计算结果较准确,但费时。

[笔记] 查询表记录空间占用情况SQL脚本,布布扣,bubuko.com

热门排行

今日推荐

热门手游