原文地址: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