SQL Server 文件和文件組

文件和文件組簡介

  在SQL Server中,數據庫在硬盤上的存儲方式和普通文件在Windows中的存儲方式沒有什麼不同,僅僅是幾個文件而已。SQL Server通過管理邏輯上的文件組的方式來管理文件。

  SQL Server通過文件組對數據文件進行管理。我們看到的邏輯數據庫由一個或者多個文件組構成。

  結構圖如下:

    

    文件組管理着磁盤上的文件,文件中存放的就是SQL Server的實際數據。

爲什麼通過文件組來管理文件

  從用戶的角度來說,創建對象時需要指定存儲文件組的只有三種數據對象:表,索引和大對象(LOB)。

  使用文件組可以隔離用戶對文件的依賴,使得用戶僅僅針對文件組來建立表和索引,而不用關心實際磁盤中的文件的情況。當文件移動或修改時,由於用戶建立的表和索引是建立在文件組上的,並不依賴具體文件,因此SQL Server可以放心的管理文件。

  另外,使用文件組的方式來管理文件,可以使得同一文件組內的文件分佈在不同的硬盤中,能夠大大提供IO性能。

  SQL Server根據每個文件設置的初始大小和增量值自動分配新加入的空間,假設在同一文件A設置的大小爲文件B的兩倍,新增一個數據佔用3頁,則按比例將2頁分配到文件A中,1頁分配到文件B中。

文件的分類

  •   首要文件:這個文件是必須有的,而且只能有一個。這個文件額外存放了其他文件的位置等信息,擴展名爲.mdf。
  •   次要文件:可以建任意多個,用於不同目的存放,擴展名爲.ndf。
  •   日誌文件:存放日誌,擴展名爲.ldf。

  上面說的集中文件名擴展名可以任意修改,推薦使用默認的擴展名。在SQL Server之後,還新增了文件流數據文件和全文索引文件。

  通過sys.database_files系統視圖可以查看SQL Server數據庫中文件的情況。

SELECT name,type_desc,physical_name,state_desc,size,growth
FROM sys.database_files

  結果如下:

  

  注意type_desc列,首要文件和次要文件都是ROWS,表示存儲的是行(Row)。

  如果一個表是存在物理上的多個文件中時,則表的數據頁的組織爲N(N爲具體的幾個文件)個B樹。而不是一個對象爲一個B樹。

創建和使用文件組

  創建文件或是文件組合一通過在Management Studio或者使用T-SQL語句進行。對於一個數據庫來說,既可以在創建時增加文件和文件組,也可以向現有的數據庫添加文件和文件組。

  創建文件組操作:

  

  創建文件操作:

  

   注意:文件的所屬文件組一旦設置了就不能夠更改了。

  下面給出一個創建索引時,指定存放到文件組的SQL實例:

  --添加索引時,指定存放的文件組
  CREATE NONCLUSTERED INDEX idx_on_other_fileGroue on ProductDemo(UPCode) ON AddFileGroup --紅色部分是主角,指定文件組。
  --如果不指定文件組,則存放到默認的文件組當中
  CREATE NONCLUSTERED INDEX idx_on_other_fileGroue on ProductDemo(UPCode)

 

使用多個文件的優點與缺點

  在大多數情況下,小型的數據庫並不需要創建多個文件來存放數據。但是隨着數據的增長,單個文件的弊端就會出現。

  •   首先,使用多個文件分佈到不同的磁盤分區(多個硬盤)能夠幾大提高IO性能。
  •   其次,多個文件對於數據比較多的數據庫來說,備份和恢復都會方便。
  •   但是,多文件需要佔用更多的磁盤空間,因爲每個文件中都有自己的一套B樹組織方式和自己的增長空間。當然也有自己的碎片。
  •   總體來說,多個文件帶來的優點是遠遠大於弊端的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章