博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL Server中数据库文件的存放方式
阅读量:6909 次
发布时间:2019-06-27

本文共 1477 字,大约阅读时间需要 4 分钟。

SQL Server中数据库文件的存放方式

  在 SERVER中,通过文件组这个逻辑对象对存放数据的文件进行管理。

  先来看一张图:

  我们看到的逻辑由一个或者多个文件组构成

  而文件组管理着磁盘上的文件.而文件中存放着SQL SERVER的实际数据。

  为什么通过文件组来管理文件

  对于用户角度来说,需对创建的对象指定存储的文件组只有三种数据对象:表,索引和大对象(LOB)

  使用文件组可以隔离用户和文件,使得用户针对文件组来建立表和索引,而不是实际磁盘中的文件。当文件移动或修改时,由于用户建立的表和索引是建立在文件组上的,并不依赖具体文件,这大大加强了可管理性。

  还有一点是,使用文件组来管理文件可以使得同一文件组内的不同文件分布在不同的硬盘中,极大的提高了IO性能。

  SQL SERVER会根据每个文件设置的初始大小和增长量会自动分配新加入的空间,假设在同一文件组中的文件A设置的大小为文件B的两倍,新增一个数据占用三页(Page),则按比例将2页分配到文件A中,1页分配到文件B中。

  文件的分类

  首要文件:这个文件是必须有的,而且只能有一个。这个文件额外存放了其他文件的位置等信息.扩展名为.mdf

  次要文件:可以建任意多个,用于不同目的存放.扩展名为.ndf

  文件:存放日志,扩展名为.ldf

  在SQL SERVER 2008之后,还新增了文件流数据文件和全文索引文件。

  上述几种文件名扩展名可以随意修改,但是我推荐使用默认的扩展名。

  我们可以通过如下语句查看数据库中的文件情况:

  还有一点要注意的是,如果一个表是存在物理上的多个文件中时,则表的数据页的组织为N(N为具体的几个文件)个B树,而不是一个对象为一个B树

 创建和使用文件组

  创建文件或是文件组可以通过在SSMS中或者使用T-SQL语句进行。对于一个数据库来说,既可以在创建时增加文件和文件组,也可以向现有的数据库添加文件和文件组.这几种方式大同小异。下面来看一下通过SSMS向现有数据库添加文件和文件组。

  首先创建文件组:

  文件组创建好后就可以向现有文件组中添加文件了:

  下面我们就可以通过语句将创建的表或者索引加入到新的文件组中了:

  使用多个文件的优点与缺点

  通常情况下,小型的数据库并不需要创建多个文件来分布数据。但是随着数据的增长,使用单个文件的弊端就开始显现。

  首先:使用多个文件分布数据到多个硬盘中可以极大的提高IO性能。

  其次:多个文件对于数据略多的数据库来说,备份和恢复都会轻松很多.我碰见过遇到一个150G的数据库,手头却没有这么大的存储设备…

  但是,在数据库的世界中,每一项好处往往伴随着一个坏处:

  显而易见,使用多文件需要占用更多的磁盘空间。这是因为每个文件中都有自己的一套B树组织方式,和自己的增长空间。当然了,还有一套自己的碎片-.-但是在大多数情况下,多占点磁盘空间带来的弊端要远远小于多文件带来的好处。

  总结

  本文对SQL SERVER中文件和文件组的概念进行了简单阐述,并在文中讲述了文件和文件组的配置方式。按照业务组织好不同的文件组来分布不同的文件,使得性能的提升,对于你半夜少接几个电话的帮助是灰常大滴:-)

====================================分割线================================

最新内容请见作者的GitHub页:http://qaseven.github.io/

转载地址:http://gmwcl.baihongyu.com/

你可能感兴趣的文章
北京云栖大会多媒体专场:新视界 新智能
查看>>
聊聊eureka server的instance注册及元数据变更接口
查看>>
[React.js]组件卸载如何自动取消异步请求
查看>>
Masonry 源码解读(上)
查看>>
SOFA 源码分析— 自定义路由寻址
查看>>
Redis Bug 总动员(持续更新)
查看>>
几个选择器的比较和准确的描述
查看>>
Java笔记—重构-完全不用 if-else 可能吗?
查看>>
CSS视口单位:快速入门
查看>>
教程 React16+Redux+Router4+Koa 服务端渲染,惰性加载,热更新
查看>>
关于Xcode更新之后插件失效以及安装失败详解
查看>>
慕课网Flask高级编程实战-3.蓝图、模型与CodeFirst
查看>>
仅2步实现 拜拜 汉堡导航栏效果~ 全新底部导航交互(滑动隐藏)
查看>>
Android小知识-WebView的Java和JavaScript交互
查看>>
说说在 Vue.js 中如何实现组件间通信(高级篇)
查看>>
Charles使用指南
查看>>
MaxCompute新功能发布
查看>>
canvas系列教程03-柱状图项目1
查看>>
如何快速的开发一个完整的 iOS 直播 app(原理篇)
查看>>
密码学note
查看>>