當數據庫數據過大查詢變慢、空間不夠的時候,咱們就須要使用文件組來擴大數據庫儲存空間,提升查詢效率了。數據庫
一、文件和文件組的含義與關係windows
每一個數據庫有一個主數據文件.和若干個從文件。文件是數據庫的物理體現。 文件組能夠包括分佈在多個邏輯分區的文件,實現負載平衡。文件組容許對文件進行分組,以便於管理和數據的分配/放置。例如,能夠分別在三個硬盤驅動器上建立三個文件(Data1.ndf、Data2.ndf和Data3.ndf),並將這三個文件指派到文件組 fgroup1 中。而後,能夠明確地在文件組fgroup1 上建立一個表。對錶中數據的查詢將分散到三個磁盤上,於是性能得以提升。在RAID(磁盤冗餘陣列)條帶集上建立單個文件也能夠得到相同的性能改善。然而,文件和文件組使您得以在新磁盤上輕易地添加新文件。另外,若是數據庫超過單個Microsoft Windows 文件的最大大小,則可使用次要數據文件容許數據庫繼續增加。服務器
一般狀況下咱們構造的數據庫都只有兩個文件,mdf文件和ldf文件.可是這樣有兩個缺點:大數據
(一)容易致使文件過大spa
咱們知道,mdf文件是數據庫文件,這樣的話也就意味着隨着數據庫的增大mdf就會相應的增大,顯然在如今的應用中數據膨脹是太常見的事情了,當你的應用變大後,mdf文件也會變大,然而windows對文件的大小是有要求的,這樣的話很容易致使mdf文件達到windows所容許的文件大小的界限(因而數據庫就崩潰了)。操作系統
(二)沒有利用到磁盤陣列設計
大型的服務器好多都有磁盤陣列,你能夠把磁盤陣列簡單的假象成n個一塊轉動的磁盤,磁盤陣列的設計是但願經過多個磁盤的串聯來獲得更大的讀寫效率.可是若是你的數據庫只有一個mdf文件(ldf文件暫時不考慮),那麼你老是隻可以利用這個磁盤陣列裏面的一個磁盤而已.那樣的話昂貴的磁盤陣列的效率就由並聯變成串聯了.試想若是咱們可以讓mdf分散成多個文件,好比說磁盤陣列上的每一個磁盤中都分配一個文件,而後把mdf中的數據分散到各個文件中,我在讀取的時候就是串聯的讀取了,這樣就充分的利用了磁盤陣的存取效能.日誌
這兩個問題日常咱們沒有遇到過(條件不具有),可是作大型的服務開發的時候這幾乎是致命的.對象
這在2005/08/2012下,運行
SELECT df.[name], df.physical_name, df.[size], df.growth, f.[name][filegroup],f.is_default
FROM sys.database_files df
JOIN sys.filegroups f ON df.data_space_id = f.data_space_id
每一個SQL Server 數據庫至少具備兩個操做系統文件:一個數據文件和一個日誌文件。數據文件包含數據和對象,例如表、索引、存儲過程和視圖。日誌文件包含恢復數據庫中的全部事務所需的信息。爲了便於分配和管理,能夠將數據文件集合起來,放到文件組中。
數據庫文件
SQL Server數據庫具備三種類型的文件,以下表所示:
文件 說明
主要
主要數據文件包含數據庫的啓動信息,並指向數據庫中的其餘文件。用戶數據和對象可存儲在此文件中,也能夠存儲在次要數據文件中。每一個數據庫有一個主要數據文件。主要數據文件的建議文件擴展名是.mdf。
次要
次要數據文件是可選的,由用戶定義並存儲用戶數據。經過將每一個文件放在不一樣的磁盤驅動器上,次要文件可用於將數據分散到多個磁盤上。另外,若是數據庫超過了單個Windows 文件的最大大小,可使用次要數據文件,這樣數據庫就能繼續增加。
次要數據文件的建議文件擴展名是.ndf。
事務日誌
事務日誌文件保存用於恢復數據庫的日誌信息。每一個數據庫必須至少有一個日誌文件。事務日誌的建議文件擴展名是.ldf。
例如,能夠建立一個簡單的數據庫Sales,其中包括一個包含全部數據和對象的主要文件和一個包含事務日誌信息的日誌文件。也能夠建立一個更復雜的數據庫Orders,其中包括一個主要文件和五個次要文件。數據庫中的數據和對象分散在全部六個文件中,而四個日誌文件包含事務日誌信息。
默認狀況下,數據和事務日誌被放在同一個驅動器上的同一個路徑下。這是爲處理單磁盤系統而採用的方法。可是,在生產環境中,這可能不是最佳的方法。建議將數據和日誌文件放在不一樣的磁盤上。
文件組
每一個數據庫有一個主要文件組。此文件組包含主要數據文件和未放入其餘文件組的全部次要文件。能夠建立用戶定義的文件組,用於將數據文件集合起來,以便於管理、數據分配和放置。
例如,能夠分別在三個磁盤驅動器上建立三個文件Data1.ndf、Data2.ndf 和 Data3.ndf,而後將它們分配給文件組fgroup1。而後,能夠明確地在文件組fgroup1 上建立一個表。對錶中數據的查詢將分散到三個磁盤上,從而提升了性能。經過使用在RAID(獨立磁盤冗餘陣列)條帶集上建立的單個文件也能得到一樣的性能提升。可是,文件和文件組使您可以輕鬆地在新磁盤上添加新文件。
下表列出了存儲在文件組中的全部數據文件。
文件組 說明
主要
包含主要文件的文件組。全部系統表都被分配到主要文件組中。
用戶定義
用戶首次建立數據庫或之後修改數據庫時明確建立的任何文件組。
默認文件組
若是在數據庫中建立對象時沒有指定對象所屬的文件組,對象將被分配給默認文件組。無論什麼時候,只能將一個文件組指定爲默認文件組。默認文件組中的文件必須足夠大,可以容納未分配給其餘文件組的全部新對象。
PRIMARY 文件組是默認文件組,除非使用ALTER DATABASE 語句進行了更改。但系統對象和表仍然分配給 PRIMARY 文件組,而不是新的默認文件組