SQL Server-获取表的大致大小

SQL Server-获取表的大致大小,sql,sql-server,Sql,Sql Server,在生产环境中,发布SELECT COUNT可能不是一个好主意-它可能会影响性能,具体取决于您的数据库引擎。在Oracle中,如果我想了解表的大小,而不必使用计数,我可以执行以下操作: SELECT table_name, num_rows, last_analyzed FROM all_tables WHERE table_name = 'MY_TABLE_NAME'; 如果启用了Oracle的表分析,这将检索它们。虽然计数不精确,但它可以让我知道一个表有多大,以防我需

在生产环境中,发布
SELECT COUNT
可能不是一个好主意-它可能会影响性能,具体取决于您的数据库引擎。在Oracle中,如果我想了解表的大小,而不必使用
计数
,我可以执行以下操作:

SELECT
    table_name,
    num_rows,
    last_analyzed
FROM all_tables
WHERE table_name = 'MY_TABLE_NAME';
如果启用了Oracle的表分析,这将检索它们。虽然计数不精确,但它可以让我知道一个表有多大,以防我需要查询它(最后一列让我知道近似值有多大)

如何在SQL Server中执行类似操作?(相关-这对SQL Server是必要的吗?Oracle必须逐行计数,因此避免了此问题。)


谢谢

您可以调用
sp\u spaceused“table\u name”

如果要对所有表执行此操作,请将其包装在
sp\MSforeachtable
中:

sp_MSforeachtable 'sp_spaceused ''[?]'''

不带任何参数调用sp_spaceused将显示数据库大小。

您也可以使用management studio

Right Click on table -> Properties -> Storage
或者您可以使用如下查询:

sp_spaceused 'TableName'
要在所有表格中获得它,您可以像使用tihs一样使用它:

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


select  * from #tmp
礼节:


如果绝对准确度不重要,这是一个非常快速的近似行数路线;如果您的SQL Server是受支持的版本,则应具有此dmv

SELECT SUM (row_count)
FROM sys.dm_db_partition_stats
WHERE object_id=OBJECT_ID('MY_TABLE_NAME')   
AND (index_id=0 or index_id=1);
SELECT SUM (row_count)
FROM sys.dm_db_partition_stats
WHERE object_id=OBJECT_ID('MY_TABLE_NAME')   
AND (index_id=0 or index_id=1);