我是SQL新手我知道如何使用数据库来获取数据库的大小
EXEC sp_spaceused
我有一个问题,如何在Sql Server数据库中获取表的大小。
与数据库中的Employee Table类似。
提前致谢。
答案 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)
您可以使用此查询来显示表的大小:
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.
然后您可以转储行物理结构,请参阅记录剖析。