如何在SQL中查找表的大小?

anj*_*jum 67 sql

如何在SQL中查找表的大小?

Kas*_*hif 98

SQL Server: -

sp_spaceused 'TableName'
Run Code Online (Sandbox Code Playgroud)

或者在管理工作室: 右键单击表 - >属性 - >存储

MySQL的: -

SELECT table_schema, table_name, data_length, index_length FROM information_schema.tables
Run Code Online (Sandbox Code Playgroud)

SYBASE: -

sp_spaceused 'TableName'
Run Code Online (Sandbox Code Playgroud)

Oracle: - 如何在 Oracle中 计算表大小


Mar*_*uer 52

结合ratty和Haim的帖子(包括评论)的答案,我想出了这个,对于SQL Server来说,到目前为止似乎是最优雅的:

-- DROP TABLE #tmpTableSizes
CREATE TABLE #tmpTableSizes
(
    tableName varchar(100),
    numberofRows varchar(100),
    reservedSize varchar(50),
    dataSize varchar(50),
    indexSize varchar(50),
    unusedSize varchar(50)
)
insert #tmpTableSizes
EXEC sp_MSforeachtable @command1="EXEC sp_spaceused '?'"


select  * from #tmpTableSizes
order by cast(LEFT(reservedSize, LEN(reservedSize) - 4) as int)  desc
Run Code Online (Sandbox Code Playgroud)

这将按照保留大小的顺序为您提供所有表的列表,从最大到最小排序.

  • 优秀的脚本 - 除了它应该读取 LEN(...) - 3,而不是负 4。返回的值如下所示:“3746520 KB”,因此只有最后 3 个字符需要删除。但是...很高兴看到 7 年前的帖子在今天和 2010 年一样有用! (3认同)
  • 让它成为一个变量表,你就不必删除它。“声明@tmpTableSizes表” (2认同)

dis*_*ame 21

查询(修改/sf/answers/552464461/)以查找以GB为单位的自定义名称表大小.您可以尝试这样做,将"YourTableName"替换为您的表名.

SELECT 
    t.NAME AS TableName,    
    p.rows AS RowCounts,
    CONVERT(DECIMAL,SUM(a.total_pages)) * 8 / 1024 / 1024 AS TotalSpaceGB, 
    SUM(a.used_pages)  * 8 / 1024 / 1024 AS UsedSpaceGB , 
    (SUM(a.total_pages) - SUM(a.used_pages)) * 8 / 1024 / 1024 AS UnusedSpaceGB
FROM 
    sys.tables t
INNER JOIN      
    sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN 
    sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN 
    sys.allocation_units a ON p.partition_id = a.container_id
LEFT OUTER JOIN 
    sys.schemas s ON t.schema_id = s.schema_id
WHERE 
    t.NAME = 'YourTable'
    AND t.is_ms_shipped = 0
    AND i.OBJECT_ID > 255 
GROUP BY 
    t.Name, s.Name, p.Rows
ORDER BY 
    UsedSpaceGB DESC, t.Name
Run Code Online (Sandbox Code Playgroud)


Sam*_*eer 19

SQL Server提供了一个内置的存储过程,您可以运行该过程以轻松显示表的大小,包括索引的大小

sp_spaceused ‘Tablename’
Run Code Online (Sandbox Code Playgroud)


Hai*_*vgi 15

SQL Server提供了一个内置的存储过程,您可以运行该过程以轻松显示表的大小,包括索引的大小......这可能会让您大吃一惊.

句法:

 sp_spaceused ‘Tablename’
Run Code Online (Sandbox Code Playgroud)

见:

http://www.howtogeek.com/howto/database/determine-size-of-a-table-in-sql-server/


mwi*_*ock 8

你是按尺寸表示表格中的记录数量吗?在这种情况下:

SELECT COUNT(*) FROM your_table_name
Run Code Online (Sandbox Code Playgroud)


Kai*_*ran 8

SQL Server,所有表的格式良好,以 KB/MB 为单位:

SELECT 
    t.NAME AS TableName,
    s.Name AS SchemaName,
    p.rows AS RowCounts,
    SUM(a.total_pages) * 8 AS TotalSpaceKB, 
    CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS TotalSpaceMB,
    SUM(a.used_pages) * 8 AS UsedSpaceKB, 
    CAST(ROUND(((SUM(a.used_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS UsedSpaceMB, 
    (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB,
    CAST(ROUND(((SUM(a.total_pages) - SUM(a.used_pages)) * 8) / 1024.00, 2) AS NUMERIC(36, 2)) AS UnusedSpaceMB
FROM 
    sys.tables t
INNER JOIN      
    sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN 
    sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN 
    sys.allocation_units a ON p.partition_id = a.container_id
LEFT OUTER JOIN 
    sys.schemas s ON t.schema_id = s.schema_id
WHERE 
    t.NAME NOT LIKE 'dt%' 
    AND t.is_ms_shipped = 0
    AND i.OBJECT_ID > 255 
GROUP BY 
    t.Name, s.Name, p.Rows
ORDER BY 
    t.Name
Run Code Online (Sandbox Code Playgroud)


Jus*_*rke 7

我知道在SQL 2012中(可能在其他版本中工作),您可以执行以下操作:

  1. 在对象资源管理器中右键单击数据库名称.
  2. 选择报告>标准报告>顶级表的磁盘使用情况.

这将为您提供前1000个表的列表,然后您可以按数据大小等订购它.


Fra*_*ens 6

在PostgreSQL中:

SELECT pg_size_pretty(pg_relation_size('tablename'));
Run Code Online (Sandbox Code Playgroud)