原文地址:http://www.cnblogs.com/CareySon/archive/2011/12/26/2301597.htmlhtml
寫在前面:上次我關於索引的文章有幾個園友發站內信問我如何將索引和表存儲在不一樣的硬盤上。我覺的須要專門寫一篇文章來說述一下文件和文件組應該更容易理解.數據庫
在SQL SERVER中,數據庫在硬盤上的存儲方式和普通文件在Windows中的存儲方式沒有什麼不一樣,僅僅是幾個文件而已.SQL SERVER經過管理邏輯上的文件組的方式來管理文件.理解文件和文件組的概念對於更好的配置數據庫來講是最基本的知識。性能
在SQL SERVER中,經過文件組這個邏輯對象對存放數據的文件進行管理.3d
先來看一張圖:日誌
咱們看到的邏輯數據庫由一個或者多個文件組構成htm
而文件組管理着磁盤上的文件.而文件中存放着SQL SERVER的實際數據.對象
對於用戶角度來講,需對建立的對象指定存儲的文件組只有三種數據對象:表,索引和大對象(LOB)blog
使用文件組能夠隔離用戶和文件,使得用戶針對文件組來創建表和索引,而不是實際磁盤中的文件。當文件移動或修改時,因爲用戶創建的表和索引是創建在文件組上的,並不依賴具體文件,這大大增強了可管理性.索引
還有一點是,使用文件組來管理文件可使得同一文件組內的不一樣文件分佈在不一樣的硬盤中,極大的提升了IO性能.get
SQL SERVER會根據每一個文件設置的初始大小和增加量會自動分配新加入的空間,假設在同一文件組中的文件A設置的大小爲文件B的兩倍,新增一個數據佔用三頁(Page),則按比例將2頁分配到文件A中,1頁分配到文件B中.
在SQL SERVER 2008以後,還新增了文件流數據文件和全文索引文件.
上述幾種文件名擴展名能夠隨意修改,可是我推薦使用默認的擴展名。
咱們能夠經過以下語句查看數據庫中的文件狀況:
還有一點要注意的是,若是一個表是存在物理上的多個文件中時,則表的數據頁的組織爲N(N爲具體的幾個文件)個B樹.而不是一個對象爲一個B樹.
建立文件或是文件組能夠經過在SSMS中或者使用T-SQL語句進行。對於一個數據庫來講,既能夠在建立時增長文件和文件組,也能夠向現有的數據庫添加文件和文件組.這幾種方式大同小異.下面來看一下經過SSMS向現有數據庫添加文件和文件組.
首先建立文件組:
文件組建立好後就能夠向現有文件組中添加文件了:
下面咱們就能夠經過語句將建立的表或者索引加入到新的文件組中了:
一般狀況下,小型的數據庫並不須要建立多個文件來分佈數據。可是隨着數據的增加,使用單個文件的弊端就開始顯現。
首先:使用多個文件分佈數據到多個硬盤中能夠極大的提升IO性能.
其次:多個文件對於數據略多的數據庫來講,備份和恢復都會輕鬆不少.我遇見過遇到一個150G的數據庫,手頭卻沒有這麼大的存儲設備…
可是,在數據庫的世界中,每一項好處每每伴隨着一個壞處:
顯而易見,使用多文件須要佔用更多的磁盤空間。這是由於每一個文件中都有本身的一套B樹組織方式,和本身的增加空間。固然了,還有一套本身的碎片-.-可是在大多數狀況下,多佔點磁盤空間帶來的弊端要遠遠小於多文件帶來的好處.
本文對SQL SERVER中文件和文件組的概念進行了簡單闡述,並在文中講述了文件和文件組的配置方式。按照業務組織好不一樣的文件組來分佈不一樣的文件,使得性能的提高,對於你半夜少接幾個電話的幫助是灰常大滴:-)
分類: SQL SERVER