SQL Server 資料庫在磁碟上以 .mdf (主檔)、.ndf (次要檔)、.ldf (記錄檔) 實體檔案儲存。檔案組 為邏輯容器,管理一組檔案,讓使用者對「檔案組」而非具體檔案建立表/索引/LOB,實現儲存與邏輯解耦。本文詳細闡述檔案類型、檔案組優勢、建立與使用、多檔案優缺點與實戰配置建議。
邏輯資料庫 → 1~N 個檔案組 → 每組 1~N 個實體檔案 → 檔案中儲存 8KB 頁面 (B 樹結構)。

| 類型 | 副檔名 | 說明 |
|---|---|---|
| 主檔案 | .mdf | 每庫恰一個,儲存系統中繼資料、其他檔案位置資訊。 |
| 次要檔案 | .ndf | 可建多個,分散資料、支援跨磁碟、可歸屬不同檔案組。 |
| 記錄檔案 | .ldf | 儲存交易記錄,至少一個,不屬於任何檔案組。 |
| Filestream 檔案 | 無固定 | SQL 2008+,儲存 BLOB 檔案流。 |
| 全文檢索檔案 | 無固定 | SQL 2008+,全文目錄實體儲存。 |
副檔名可自訂,但強烈建議沿用預設便於辨識。
ON [FileGroupName],檔案增減/移動不影響應用程式碼。FG_Indexes)。
FG_Indexes、路徑指向獨立磁碟 (如 E:\Data\Indexes.ndf)。
CREATE TABLE dbo.BigTable (
ID INT IDENTITY PRIMARY KEY,
DataCol VARCHAR(100)
) ON FG_Indexes; -- 數據放入 FG_Indexes
CREATE INDEX IX_BigTable_DataCol
ON dbo.BigTable (DataCol)
ON FG_Indexes; -- 索引也放入同組 (或分離到另一組)

SELECT
name AS LogicalName,
physical_name AS PhysicalPath,
type_desc AS FileType,
data_space_id AS FileGroupID,
(size * 8) / 1024.0 AS Size_MB
FROM sys.database_files;

| 優點 | 缺點 |
|---|---|
| 多磁碟平行 I/O 大幅提升吞吐 | 每檔案獨立 B 樹、成長空間、碎片,總體佔用磁碟空間略大 |
| 備份/還原可平行、分檔、壓縮更靈活 | 管理複雜度提升 (監控、檢查碎片、容量規劃) |
| 單一檔案損壞不波及全庫 (配合檔案組備份) | 小型資料庫 (<100GB) 收益不明顯,反增維護負擔 |
| 支援單一檔案組唯讀/離線操作 |
經驗法則:資料檔 > 500GB 或明顯 I/O 瓶頸時 考慮多檔案/多檔案組;否則單一主檔 + 單一記錄檔最簡維護。
檔案組是 SQL Server 儲存層的核心抽象,將「資料放哪裡」從「建什麼表」中解耦。善用檔案組跨磁碟條帶化、熱冷資料分離、分階段備份還原,能以最小代價獲得最大 I/O 效能彈性。建議從規劃期即納入檔案組設計,避免上線後搬移資料的高風險與停機成本。