AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 81245
Accepted
Heisenberg
Heisenberg
Asked: 2014-10-28 23:20:10 +0800 CST2014-10-28 23:20:10 +0800 CST 2014-10-28 23:20:10 +0800 CST

如何确定我的表在 SQL Server 数据库中的大小

  • 772

是否有任何内置函数/存储过程/查询有助于检索有关MyTableSQL Server 数据库中大小的信息?

sql-server table
  • 7 7 个回答
  • 211810 Views

7 个回答

  • Voted
  1. Mark Sinkinson
    2014-11-07T05:37:32+08:002014-11-07T05:37:32+08:00

    如果您不想编写脚本,也可以在 SSMS(快捷键 F7)中打开未充分利用的“对象资源管理器详细信息”。

    顶级对象资源管理器详细信息

    从顶层打开 Tables 文件夹以获取数据库中所有表的列表。

    您可能需要自定义列以查看已用空间。这可以通过右键单击标题行并选择要显示的列来完成。

    SSMS 中的表数据大小

    对象资源管理器详细信息中有更多类似的数据可用。

    • 51
  2. Best Answer
    Aasim Abdullah
    2014-10-28T23:33:54+08:002014-10-28T23:33:54+08:00

    对于单表,您可以使用

    sp_spaceused MyTable
    

    sp_msforeachtable对于数据库中的所有表,您可以按照以下方式使用它

    CREATE TABLE #temp (
    table_name sysname ,
    row_count INT,
    reserved_size VARCHAR(50),
    data_size VARCHAR(50),
    index_size VARCHAR(50),
    unused_size VARCHAR(50))
    SET NOCOUNT ON
    INSERT #temp
    EXEC sp_msforeachtable 'sp_spaceused ''?'''
    SELECT a.table_name,
    a.row_count,
    COUNT(*) AS col_count,
    a.data_size
    FROM #temp a
    INNER JOIN information_schema.columns b
    ON a.table_name collate database_default
    = b.table_name collate database_default
    GROUP BY a.table_name, a.row_count, a.data_size
    ORDER BY CAST(REPLACE(a.data_size, ' KB', '') AS integer) DESC
    DROP TABLE #temp
    
    • 43
  3. Sir Swears-a-lot
    2014-10-29T00:30:16+08:002014-10-29T00:30:16+08:00

    在 SSMS 中右键单击 Database,选择 Reports、Standard Reports、Disk Usage by Top Tables。

    该报告将为您提供每个表使用的行数和千字节数。

    • 22
  4. AA.SC
    2014-11-07T03:44:04+08:002014-11-07T03:44:04+08:00

    要获取表格大小信息,我喜欢使用以下脚本

    SELECT  sc.name + '.' + t.NAME AS TableName,  
            p.[Rows],  
            ( SUM(a.total_pages) * 8 ) / 1024 AS TotalReservedSpaceMB, -- Number of total pages * 8KB size of each page in SQL Server  
            ( SUM(a.used_pages) * 8 ) / 1024 AS UsedDataSpaceMB,  
            ( SUM(a.data_pages) * 8 ) / 1024 AS FreeUnusedSpaceMB  
    FROM    msdb.sys.tables t  
            INNER JOIN msdb.sys.schemas sc ON sc.schema_id = t.schema_id  
            INNER JOIN msdb.sys.indexes i ON t.OBJECT_ID = i.object_id  
            INNER JOIN msdb.sys.partitions p ON i.object_id = p.OBJECT_ID  
                                                AND i.index_id = p.index_id  
            INNER JOIN msdb.sys.allocation_units a ON p.partition_id = a.container_id  
    WHERE   t.type_desc = 'USER_TABLE'  
            AND i.index_id <= 1  --- Heap\ CLUSTERED
            AND t.NAME='MYTableName' -- Replace with valid table name
    GROUP BY sc.name + '.' + t.NAME,  
            i.[object_id],i.index_id, i.name, p.[Rows]  
    ORDER BY ( SUM(a.total_pages) * 8 ) / 1024 DESC  
    
    • 4
  5. hkravitz
    2016-06-28T05:05:25+08:002016-06-28T05:05:25+08:00

    您可以使用以下脚本来计算每个表的体积和每个数据库总数的另一个结果集

        SET NOCOUNT ON 
        IF OBJECT_ID('tempdb..#SpaceUsed') IS NOT NULL DROP TABLE #SpaceUsed
    
        CREATE TABLE #SpaceUsed 
        (
        TableName sysname ,
        [Rows] int ,
        [Reserved] varchar(20),
        [Data] varchar(20),
        [Index_Size] varchar(20),
        [Unused] varchar(20),
        [Reserved_KB] bigint,
        [Data_KB] bigint,
        [Index_Size_KB] bigint,
        [Unused_KB] bigint
        )
    
        DECLARE @CMD NVARCHAR(MAX) =''
        SELECT @CMD +='EXEC sp_spaceused ' +  ''''+QUOTENAME(TABLE_SCHEMA)+'.'+ QUOTENAME(TABLE_NAME)+''''+';'+CHAR(10)
        FROM INFORMATION_SCHEMA.TABLES 
        --PRINT @CMD
    
         INSERT INTO #SpaceUsed (TableName ,[Rows] , [Reserved], [Data] , [Index_Size] , [Unused] )
         EXEC sp_executesql @CMD
    
    
    
         UPDATE #SpaceUsed 
         SET [Reserved_KB] = CONVERT(BIGINT,RTRIM(LTRIM(REPLACE([Reserved] , ' KB', '')))),
             [Data_KB] = CONVERT(BIGINT,RTRIM(LTRIM(REPLACE([Data] , ' KB', '')))),
             [Index_Size_KB]= CONVERT(BIGINT,RTRIM(LTRIM(REPLACE([Index_Size] , ' KB', '')))),
             [Unused_KB]= CONVERT(BIGINT,RTRIM(LTRIM(REPLACE([Unused] , ' KB', ''))))
    
    
         SELECT TableName, [Rows], Reserved_KB , Data_KB , Index_Size_KB , Unused_KB ,  Data_KB / 1024.0 Data_MB , Data_KB / 1024.0 / 1024.0 Data_GB
         FROM #SpaceUsed
         ORDER BY Data_KB DESC 
    
         SELECT SUM(Reserved_KB) Reserved_KB , SUM(Data_KB) Data_KB, SUM(Index_Size_KB) Index_Size_KB , SUM(Unused_KB) Unused_KB ,SUM(Data_KB / 1024.0) Data_MB , SUM(Data_KB / 1024.0 / 1024.0) Data_GB
         FROM #SpaceUsed
    
         DROP TABLE #SpaceUsed
    
    • 3
  6. Andy Jones
    2014-10-28T23:40:14+08:002014-10-28T23:40:14+08:00

    看看 sys.dm_db_partition_stats ( http://msdn.microsoft.com/en-us/library/ms187737.aspx )。

    该链接以及http://blogs.msdn.com/b/cindygross/archive/2010/04/02/dmv-series-sys-dm-db-partition-stats.aspx上有一些示例查询

    您可以修改以满足您的需要,即过滤入/出非聚集索引。将页数乘以 8 以获得以 KB 为单位的大小,然后除以 2^10 (=1024) 以在需要时转换为 MB。

    sp_spaceused ( http://msdn.microsoft.com/en-us/library/ms188776.aspx ) 也将提供表大小信息。

    • 2
  7. SQLBen
    2014-10-29T12:51:55+08:002014-10-29T12:51:55+08:00

    转到数据库,然后右键单击并单击报告,然后单击标准报告,然后按表单击磁盘使用情况。这将为您提供该数据库中的所有故事及其记录、数据、索引等

    • 1

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve