数据库中的表大小

时间:2014-09-30 09:35:29

标签: sql sql-server

我是SQL新手我知道如何使用数据库来获取数据库的大小 EXEC sp_spaceused 我有一个问题,如何在Sql Server数据库中获取表的大小。

与数据库中的Employee Table类似。

提前致谢。

3 个答案:

答案 0 :(得分:1)

这个稍微涉及的T-SQL语句将为您提供sp_spaceused返回的完全相同的信息:

WITH pages AS 
(
    SELECT
        object_id,
        SUM(reserved_page_count) AS reserved_pages,
        SUM(used_page_count) AS used_pages,
        SUM(CASE 
               WHEN (index_id < 2)
                  THEN (in_row_data_page_count + lob_used_page_count + row_overflow_used_page_count)
               ELSE lob_used_page_count + row_overflow_used_page_count
            END) AS pages
    FROM
        sys.dm_db_partition_stats
    GROUP BY
        object_id),
extra AS 
(
    SELECT
        p.object_id,
        SUM(reserved_page_count) AS reserved_pages,
        SUM(used_page_count) AS used_pages
    FROM
        sys.dm_db_partition_stats p
    INNER JOIN 
        sys.internal_tables it ON p.object_id = it.object_id
    WHERE
        it.internal_type IN (202, 204, 211, 212, 213, 214, 215, 216)
    GROUP BY
        p.object_id)
SELECT
    SchemaName = s.NAME,
    TableName = t.NAME,
    CompleteName = s.NAME + '.' + t.NAME,
    (p.reserved_pages + ISNULL(e.reserved_pages, 0)) * 8 AS reserved_kb,
    pages * 8 AS data_kb ,
    (CASE 
        WHEN p.used_pages + ISNULL(e.used_pages, 0) > pages
          THEN (p.used_pages + ISNULL(e.used_pages, 0) - pages)
          ELSE 0
     END) * 8 AS index_kb ,
    (CASE 
        WHEN p.reserved_pages + ISNULL(e.reserved_pages, 0) > p.used_pages + ISNULL(e.used_pages, 0)
          THEN (p.reserved_pages + ISNULL(e.reserved_pages, 0) - p.used_pages + ISNULL(e.used_pages, 0))
          ELSE 0
     END) * 8 AS unused_kb
FROM
    pages p
INNER JOIN 
    sys.tables t ON t.object_id = p.object_id
INNER JOIN 
    sys.schemas s ON s.schema_id = t.schema_id
LEFT OUTER JOIN 
    extra e ON p.object_id = e.object_id
WHERE
    t.is_ms_shipped = 0
ORDER BY
    s.Name, t.Name

当然,理想情况下,你会隐藏&#34;这可以在你自己的一个很好用的存储过程中使它随时可用...

答案 1 :(得分:0)

mysql中的

您可以使用此查询来显示表的大小:

SELECT table_name AS "Table", 
round(((data_length + index_length) / 1024 / 1024), 2) "Size in MB" 
FROM information_schema.TABLES 
WHERE table_schema = "$DB_NAME"
AND table_name = "$TABLE_NAME";

在sql中:

sp_spaceused可以获取有关表,索引视图或整个数据库使用的磁盘空间的信息。

USE MyDatabase; GO

EXEC sp_spaceused N'dbo.MyTable'; GO

一次用于所有表:

USE MyDatabase; GO 

sp_msforeachtable 'EXEC sp_spaceused [?]' GO

答案 2 :(得分:0)

一种方法是查看sys.dm_db_index_physical_stats输出。

min_record_size_in_bytes,max_record_size_in_bytes和avg_record_size_in_bytes将为您提供所需的尺寸。

如果要查看特定记录的大小,另一种方法是查找物理行位置,请参阅

SQL Server 2008: New (undocumented) physical row locator function.

然后您可以转储行物理结构,请参阅记录剖析。