在sqlserver中,数据库在硬盘的存储方式和普通文件存储一样,仅仅几个文件而已,sqlserver通过管理逻辑上的文件组的方式来管理存储数据的文件,
如图:
文件组管理着磁盘上的文件,而文件中存放着sqlserver的实际数据
为什么通过文件组来管理文件?
使用文件组可以隔离用户和文件,使得用户针对文件组来创建表和索引,而不是实际磁盘的文件,
当文件移动或者修改时候,由于用户建立的表和索引是建立在文件组上的,并不依赖文件,这样加强了可管理性
还有一点:使用文件组管理文件可以使的同一文件组内的不同文件分部在不同的磁盘中,极大的提高IO性能
sqlserver会根据每个文件设置的初始大小和增长量自动分配新加入的空间,假设在同一文件组中的文件A设置的大小为文件B的两倍,新增一个数据占用三页,则按比例将2页分配到文件A中,1页分配到文件B中
文件分类:
1 扩展名为.mdf的首要文件(只能有一个)
2 次要文件,可以建立多个,用于不同目的存放 扩展名为 .ndf
3 日志文件,存放日志,扩展名为 .ldf
2008之后 新增文件流数据文件和全文索引文件
新建一个数据库:可以在创建的时候增加文件和文件组,也可以向现有的数据库添加文件和文件组
在数据库的属性选项 文件组中,
primary设置为选中,则创建表或者索引的时候默认会加进这个文件组
文件组创建好后就可以往组里添加文件了
数据库文件所属的文件组一旦设定,则不能更改
使用多个文件的优点和缺点:
通常情况:小型数据库并不需要创建多个文件来分布数据,但随着数据的增长,
使用多个文件分布数据到多个硬盘可以极大的提高IO性能
其次:多个文件对于数据略多的数据库来说,备份和恢复都很轻松
多文件缺点:需要占用更多的磁盘空间,因为每个文件都有自己的一套B树和增长空间,当然还有一些碎片,但多占磁盘空间的弊端要远远小于多文件带来的好处