SQLServer中数据库文件的存放方式,文件和文件组
发布时间:2024-01-25 21:38:25
简介
在SQL SERVER中,数据库在硬盘上的存储方式和普通文件在Windows中的存储方式没有什么不同,仅仅是几个文件而已.SQL SERVER通过管理逻辑上的文件组的方式来管理文件.理解文件和文件组的概念对于更好的配置数据库来说是最基本的知识。
理解文件和文件组
在SQL 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中文件和文件组的概念进行了简单阐述,并在文中讲述了文件和文件组的配置方式。按照业务组织好不同的文件组来分布不同的文件,使得性能的提升,对于你半夜少接几个电话的帮助是灰常大滴:-)


猜你喜欢
- 一、configparser模块是什么可以用来操作后缀为 .ini 的配置文件;python标准库(就是python自带的意思,无需安装)二
- (一)Git的安装和配置1.下载git,git的官网是:https://git-scm.com/1.1右下角点击安装,安装过程一直下一步。1
- 在python中,通过如下两个模块可以实现邮件的自动化操作smtplibemailsmtplib模块是对SMTP协议的封装,用于发送邮件;e
- 目录目标为什么操作步骤工程截图运行效果完整源代码目标在SpringBoot中集成内存数据库Sqlite.为什么像H2、hsqldb、derb
- 从网上找了很多django单元测试的案例,感觉不是很好用,于是自己写了一套测试方法,在测试环境我们只需要传uri 、请求方式、参数即可
- 本文主要介绍了vscode插件听网易云的实现,具体如下:当真正的听到了我本人的我喜欢的歌单里的歌时,惊呆了老铁,所以我此时此刻用激动的心颤抖
- 第一点:找Python安装目录方法一:方法二:输入import sysprint(sys.path)化黑线处第二点:找到安装目录后就可以开始
- timeit.repeattimeit.repeat默认会执行3轮,每轮执行1000000次。返回每轮的总执行时间列表字典获取性能大家都知道
- 一、MySQL修改密码方法总结首先要说明一点的是:一般情况下,修改MySQL密码是需要有mysql里的root权限的,这样一般用户是无法更改
- 写在前面这篇文章主要让大家明白多线程爬虫,因为go语言实现并发是很容易的。这次的服务端,是我们之前搭建的电子商城平台,所以我们不担心ip被封
- 1. datetime模块介绍1.1 datetime模块包含的类1.2 datetime模块中包含的常量2. datetime实例的方法案
- 需求背景一个统计接口,前端需要返回两个数组,一个是0-23的小时计数,一个是各小时对应的统计数。思路 直接使用group by查询要统计的表
- 目录1. 递归函数2. 递归练习3. 小练习总结1. 递归函数# ### 递归函数"""递归函数 : 自己调用
- # -*- coding: utf-8 -*- import httplibfrom urllib import urlencodeimpo
- atom(一款开源的代码编辑器)是github专门为程序员推出的一个跨平台文本编辑器。具有简洁和直观的图形用户界面,并有很多有趣的特点:支持
- 用法示例:import random# 1)随机小数print(random.random()) # 获取大于0且小于1 之间的小数 &nb
- 1. 循环require在JavaScript中,模块之间可能出现相互引用的情况,例如现在有三个模块,他们之间的相互引用关系如下,大致的引用
- 目前是把图片存在mongodb数据库,实现一个方法,比如 访问 /get_pic/ID 能实现图片在浏览器打开,添加了一个状态,比如?fil
- 有时引用其它js时,其js却使用了window.onload事件,这样的话,引入的页面的onload事件就有可能执行不了,怎样才能两个都运行
- 本文实例讲述了pymongo实现控制mongodb中数字字段做加法的方法。分享给大家供大家参考。具体分析如下:这个非常实用,比如我们需要给文