【问题标题】:How to calculate SQL Table Size?如何计算 SQL 表大小?
【发布时间】:2022-06-16 19:04:31
【问题描述】:

我有兴趣在 SQL 中计算表的实际大小。 我也有兴趣查看行的平均大小以及行的平均大小

【问题讨论】:

    标签: sql


    【解决方案1】:
    --< Check total size of table>
    DECLARE @table NVARCHAR(128)
    DECLARE @idcol NVARCHAR(128)
    DECLARE @sql NVARCHAR(MAX)
    
    --initialize those two values
    SET @table = 'YourTable'
    SET @idcol = 'RowIdentifier'
    
    SET @sql = 'WITH Table_CTE AS (SELECT SUM((0'
    
    SELECT @sql = @sql + ' + isnull(datalength(' + name + '), 1)' 
            FROM  sys.columns 
            WHERE object_id = OBJECT_ID(@table)
            AND   is_computed = 0
    SET @sql = @sql + ')) as TableSize from ' + @table + ') SELECT (CASE WHEN TableSize < 1000000 THEN
               CONCAT(CEILING(TableSize / 1024.0), ''KB'')
          ELSE 
               CONCAT(FORMAT(TableSize / 1048576.0, ''N3''), ''MB'')
     END) AS ' + @table + '_TableSize FROM Table_CTE'
    
    PRINT @sql
    
    exec (@sql)
    --</Check total size of table>
    

    --< Check average size of table row>
    DECLARE @table NVARCHAR(128)
    DECLARE @idcol NVARCHAR(128)
    DECLARE @sql NVARCHAR(MAX)
    
    --initialize those two values
    SET @table = 'YourTable'
    SET @idcol = 'RowIdentifier'
    
    SET @sql = 'WITH Table_CTE AS (SELECT AVG((0'
    
    SELECT @sql = @sql + ' + isnull(datalength(' + name + '), 1)' 
            FROM  sys.columns 
            WHERE object_id = OBJECT_ID(@table)
            AND   is_computed = 0
    SET @sql = @sql + ')) as TableSize from ' + @table + ') SELECT (CASE WHEN TableSize < 1000000 THEN
               CONCAT(FORMAT(TableSize / 1024.0, ''N3''), ''KB'')
          ELSE 
               CONCAT(FORMAT(TableSize / 1048576.0, ''N3''), ''MB'')
     END) AS ' + @table + '_AvgRowSize FROM Table_CTE'
    
    PRINT @sql
    
    exec (@sql)
    --</Check average size of table row>
    

    --< Check size of each table row>
    declare @table nvarchar(128)
    declare @idcol nvarchar(128)
    declare @sql nvarchar(max)
    
    --initialize those two values
    set @table = 'YourTable'
    set @idcol = 'RowIdentifier'
    
    set @sql = 'WITH Table_CTE AS (select ' + @idcol +' , (0'
    
    select @sql = @sql + ' + isnull(datalength(' + name + '), 1)' 
            from  sys.columns 
            where object_id = object_id(@table)
            and   is_computed = 0
    set @sql = @sql + ') as rowsize from ' + @table + ') SELECT ' + @idcol + ', (CASE WHEN rowsize < 1000000 THEN
               CONCAT(FORMAT(rowsize / 1024.0, ''N3''), ''KB'')
          ELSE 
               CONCAT(FORMAT(rowsize / 1048576.0, ''N3''), ''MB'')
     END) AS RowSize FROM Table_CTE' + ' order by rowsize desc'
    
    PRINT @sql
    
    exec (@sql)
    --< Check size of each table row>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多