在 MSSQL 中,可以通過系統檢視或內建存儲過程來查看資料庫的大小,包括資料和索引的占用。以下是常用的方法:


方法 1:使用 sp_spaceused

sp_spaceused 是一個內建的存儲過程,用於查看資料庫的空間使用情況。

查看整個資料庫的大小

  1. 切換到目標資料庫:

    1
    2
    USE [YourDatabaseName];
    GO
  2. 執行以下命令:返回的關鍵結果:

    1
    EXEC sp_spaceused;
    • database_size:資料庫的總大小(資料和索引)。
    • unallocated space:未分配的空間。

查看特定表的大小

  1. 執行以下命令:返回的關鍵結果:

    1
    EXEC sp_spaceused N'[YourTableName]';
    • reserved:表的總預留空間(資料、索引和未使用空間)。
    • data:表中資料的大小。
    • index_size:表的索引大小。
    • unused:未使用的空間。

方法 2:使用 sys.master_filessys.database_files

可以直接從系統檢視中查詢資料庫文件的大小。

查看資料庫的總大小

執行以下查詢:

1
2
3
4
5
6
7
8
9
SELECT
name AS DatabaseName,
SUM(size) * 8 / 1024 AS SizeInMB
FROM
sys.master_files
WHERE
database_id = DB_ID('YourDatabaseName') -- 替換為資料庫名稱
GROUP BY
name;
  • size:每個文件的大小(以 8KB 頁為單位)。

方法 3:使用 sys.dm_db_partition_stats

這個動態管理檢視用於查看每個表和索引的空間使用情況。

查看所有表的大小

執行以下查詢:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT
t.NAME AS TableName,
SUM(a.total_pages) * 8 AS TotalSpaceKB,
SUM(a.used_pages) * 8 AS UsedSpaceKB,
(SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB
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
GROUP BY
t.NAME
ORDER BY
TotalSpaceKB DESC;
  • TotalSpaceKB:表的總大小(包括資料和索引)。
  • UsedSpaceKB:已使用的空間。
  • UnusedSpaceKB:未使用的空間。

方法 4:使用 sys.database_files 查看具體文件大小

執行以下查詢來查看資料庫中每個文件的大小:

1
2
3
4
5
6
7
SELECT
name AS FileName,
size * 8 / 1024 AS SizeInMB,
physical_name AS PhysicalPath,
type_desc AS FileType
FROM
sys.database_files;
  • FileType:文件類型(ROWS 表示資料文件,LOG 表示日誌文件)。
  • SizeInMB:文件大小(以 MB 為單位)。

推薦方法

  • 快速檢查資料庫大小: 使用 sp_spaceused
  • 詳細查看所有表大小: 使用 sys.dm_db_partition_stats
  • 檢查文件大小: 使用 sys.database_files