SQL Server中的文件和文件組介紹
文件和文件組簡(jiǎn)介
在SQL Server中,數(shù)據(jù)庫(kù)在硬盤(pán)上的存儲(chǔ)方式和普通文件在Windows中的存儲(chǔ)方式?jīng)]有什么不同,僅僅是幾個(gè)文件而已。SQL Server通過(guò)管理邏輯上的文件組的方式來(lái)管理文件。
SQL Server通過(guò)文件組對(duì)數(shù)據(jù)文件進(jìn)行管理。我們看到的邏輯數(shù)據(jù)庫(kù)由一個(gè)或者多個(gè)文件組構(gòu)成。
結(jié)構(gòu)圖如下:

文件組管理著磁盤(pán)上的文件,文件中存放的就是SQL Server的實(shí)際數(shù)據(jù)。
為什么通過(guò)文件組來(lái)管理文件
從用戶的角度來(lái)說(shuō),創(chuàng)建對(duì)象時(shí)需要指定存儲(chǔ)文件組的只有三種數(shù)據(jù)對(duì)象:表,索引和大對(duì)象(LOB)。
使用文件組可以隔離用戶對(duì)文件的依賴,使得用戶僅僅針對(duì)文件組來(lái)建立表和索引,而不用關(guān)心實(shí)際磁盤(pán)中的文件的情況。當(dāng)文件移動(dòng)或修改時(shí),由于用戶建立的表和索引是建立在文件組上的,并不依賴具體文件,因此SQL Server可以放心的管理文件。
另外,使用文件組的方式來(lái)管理文件,可以使得同一文件組內(nèi)的文件分布在不同的硬盤(pán)中,能夠大大提供IO性能。
SQL Server根據(jù)每個(gè)文件設(shè)置的初始大小和增量值自動(dòng)分配新加入的空間,假設(shè)在同一文件A設(shè)置的大小為文件B的兩倍,新增一個(gè)數(shù)據(jù)占用3頁(yè),則按比例將2頁(yè)分配到文件A中,1頁(yè)分配到文件B中。
文件的分類(lèi)
- 首要文件:這個(gè)文件是必須有的,而且只能有一個(gè)。這個(gè)文件額外存放了其他文件的位置等信息,擴(kuò)展名為.mdf。
- 次要文件:可以建任意多個(gè),用于不同目的存放,擴(kuò)展名為.ndf。
- 日志文件:存放日志,擴(kuò)展名為.ldf。
上面說(shuō)的集中文件名擴(kuò)展名可以任意修改,推薦使用默認(rèn)的擴(kuò)展名。在SQL Server之后,還新增了文件流數(shù)據(jù)文件和全文索引文件。
通過(guò)sys.database_files系統(tǒng)視圖可以查看SQL Server數(shù)據(jù)庫(kù)中文件的情況。
SELECT name,type_desc,physical_name,state_desc,size,growth FROM sys.database_files
結(jié)果如下:

注意type_desc列,首要文件和次要文件都是ROWS,表示存儲(chǔ)的是行(Row)。
如果一個(gè)表是存在物理上的多個(gè)文件中時(shí),則表的數(shù)據(jù)頁(yè)的組織為N(N為具體的幾個(gè)文件)個(gè)B樹(shù)。而不是一個(gè)對(duì)象為一個(gè)B樹(shù)。
創(chuàng)建和使用文件組
創(chuàng)建文件或是文件組合一通過(guò)在Management Studio或者使用T-SQL語(yǔ)句進(jìn)行。對(duì)于一個(gè)數(shù)據(jù)庫(kù)來(lái)說(shuō),既可以在創(chuàng)建時(shí)增加文件和文件組,也可以向現(xiàn)有的數(shù)據(jù)庫(kù)添加文件和文件組。
創(chuàng)建文件組操作:

創(chuàng)建文件操作:

注意:文件的所屬文件組一旦設(shè)置了就不能夠更改了。
下面給出一個(gè)創(chuàng)建索引時(shí),指定存放到文件組的SQL實(shí)例:
--添加索引時(shí),指定存放的文件組 CREATE NONCLUSTERED INDEX idx_on_other_fileGroue on ProductDemo(UPCode) ON AddFileGroup --紅色部分是主角,指定文件組。 --如果不指定文件組,則存放到默認(rèn)的文件組當(dāng)中 CREATE NONCLUSTERED INDEX idx_on_other_fileGroue on ProductDemo(UPCode)
使用多個(gè)文件的優(yōu)點(diǎn)與缺點(diǎn)
在大多數(shù)情況下,小型的數(shù)據(jù)庫(kù)并不需要?jiǎng)?chuàng)建多個(gè)文件來(lái)存放數(shù)據(jù)。但是隨著數(shù)據(jù)的增長(zhǎng),單個(gè)文件的弊端就會(huì)出現(xiàn)。
- 首先,使用多個(gè)文件分布到不同的磁盤(pán)分區(qū)(多個(gè)硬盤(pán))能夠幾大提高IO性能。
- 其次,多個(gè)文件對(duì)于數(shù)據(jù)比較多的數(shù)據(jù)庫(kù)來(lái)說(shuō),備份和恢復(fù)都會(huì)方便。
- 但是,多文件需要占用更多的磁盤(pán)空間,因?yàn)槊總€(gè)文件中都有自己的一套B樹(shù)組織方式和自己的增長(zhǎng)空間。當(dāng)然也有自己的碎片。
- 總體來(lái)說(shuō),多個(gè)文件帶來(lái)的優(yōu)點(diǎn)是遠(yuǎn)遠(yuǎn)大于弊端的。
到此這篇關(guān)于SQL Server文件和文件組的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SQL Server 數(shù)據(jù)庫(kù)中的收縮數(shù)據(jù)庫(kù)和文件操作
收縮數(shù)據(jù)文件通過(guò)將數(shù)據(jù)頁(yè)從文件末尾移動(dòng)到更靠近文件開(kāi)頭的未占用的空間來(lái)恢復(fù)空間,在文件末尾創(chuàng)建足夠的空間后,可取消對(duì)文件末尾的數(shù)據(jù)頁(yè)的分配并將它們返回給文件系統(tǒng),本文給大家介紹SQL Server 數(shù)據(jù)庫(kù)中的收縮數(shù)據(jù)庫(kù)和文件的相關(guān)知識(shí),一起看看吧2023-07-07
數(shù)據(jù)庫(kù)高并發(fā)情況下重復(fù)值寫(xiě)入的避免 字段組合約束
10線程同時(shí)操作,頻繁出現(xiàn)插入同樣數(shù)據(jù)的問(wèn)題的解決方法。大家可以參考下。2009-08-08
mybatis動(dòng)態(tài)sql常用場(chǎng)景總結(jié)
在平時(shí)開(kāi)發(fā)中針對(duì)動(dòng)態(tài)sql經(jīng)常會(huì)使用到,為了加深對(duì)動(dòng)態(tài)sql的熟練度,小編給大家分享一篇教程關(guān)于mybatis動(dòng)態(tài)sql常用場(chǎng)景總結(jié),需要的朋友可以參考下2021-08-08
sqlserver查找括號(hào)()中字符串內(nèi)容的方法實(shí)現(xiàn)
本文主要介紹了sqlserver查找括號(hào)()中字符串內(nèi)容的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05
SQLServer2005 按照日期自動(dòng)備份的方法
SQLServer2005如何備份,按照日期自動(dòng)備份2010-07-07

