SQL Server中的文件和文件组介绍

作者:springsnow 时间:2024-01-14 06:57:45 

文件和文件组简介

在SQL Server中,数据库在硬盘上的存储方式和普通文件在Windows中的存储方式没有什么不同,仅仅是几个文件而已。SQL Server通过管理逻辑上的文件组的方式来管理文件。

SQL Server通过文件组对数据文件进行管理。我们看到的逻辑数据库由一个或者多个文件组构成。

结构图如下:

SQL Server中的文件和文件组介绍

文件组管理着磁盘上的文件,文件中存放的就是SQL Server的实际数据。

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

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

使用文件组可以隔离用户对文件的依赖,使得用户仅仅针对文件组来建立表和索引,而不用关心实际磁盘中的文件的情况。当文件移动或修改时,由于用户建立的表和索引是建立在文件组上的,并不依赖具体文件,因此SQL Server可以放心的管理文件。

另外,使用文件组的方式来管理文件,可以使得同一文件组内的文件分布在不同的硬盘中,能够大大提供IO性能。

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

文件的分类

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

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

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

上面说的集中文件名扩展名可以任意修改,推荐使用默认的扩展名。在SQL Server之后,还新增了文件流数据文件和全文索引文件。

通过sys.database_files系统视图可以查看SQL Server数据库中文件的情况。

SELECT name,type_desc,physical_name,state_desc,size,growth
FROM sys.database_files

结果如下:

SQL Server中的文件和文件组介绍

注意type_desc列,首要文件和次要文件都是ROWS,表示存储的是行(Row)。

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

创建和使用文件组

创建文件或是文件组合一通过在Management Studio或者使用T-SQL语句进行。对于一个数据库来说,既可以在创建时增加文件和文件组,也可以向现有的数据库添加文件和文件组。

创建文件组操作:

SQL Server中的文件和文件组介绍

创建文件操作:

SQL Server中的文件和文件组介绍

 注意:文件的所属文件组一旦设置了就不能够更改了。

下面给出一个创建索引时,指定存放到文件组的SQL实例:

--添加索引时,指定存放的文件组
CREATE NONCLUSTERED INDEX idx_on_other_fileGroue on ProductDemo(UPCode) ON AddFileGroup --红色部分是主角,指定文件组。
--如果不指定文件组,则存放到默认的文件组当中
CREATE NONCLUSTERED INDEX idx_on_other_fileGroue on ProductDemo(UPCode)

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

在大多数情况下,小型的数据库并不需要创建多个文件来存放数据。但是随着数据的增长,单个文件的弊端就会出现。

  • 首先,使用多个文件分布到不同的磁盘分区(多个硬盘)能够几大提高IO性能。

  • 其次,多个文件对于数据比较多的数据库来说,备份和恢复都会方便。

  • 但是,多文件需要占用更多的磁盘空间,因为每个文件中都有自己的一套B树组织方式和自己的增长空间。当然也有自己的碎片。

  • 总体来说,多个文件带来的优点是远远大于弊端的。

来源:https://www.cnblogs.com/kissdodog/p/3156166.html

标签:SQL,Server,文件,文件组
0
投稿

猜你喜欢

  • python查看自己安装的所有库并导出的命令

    2022-03-01 03:03:08
  • asp 通用修改和增加函数代码

    2011-03-16 11:15:00
  • python sklearn包——混淆矩阵、分类报告等自动生成方式

    2022-05-29 12:19:27
  • SQL触发器定义与使用

    2024-01-28 09:21:27
  • 深入理解Angularjs向指令传递数据双向绑定机制

    2024-05-02 17:38:26
  • SQL Server数据库附加失败的解决办法

    2024-01-25 05:38:23
  • [欣赏] 情景互动广告

    2008-08-06 12:59:00
  • PyQt编程之如何在屏幕中央显示窗体的实例

    2022-04-26 07:00:49
  • 基于Jquery+Ajax+Json的高效分页实现代码

    2024-05-21 10:12:19
  • Python中bytes和str的区别与联系详解

    2022-04-18 18:36:57
  • php获取当前时间的毫秒数的方法

    2023-06-28 06:43:37
  • Go JSON编码与解码的实现

    2024-02-18 23:53:56
  • JS实现DOM节点插入操作之子节点与兄弟节点插入操作示例

    2024-04-22 22:35:27
  • SQL Server中使用DTS设计器进行数据转移

    2009-01-08 16:15:00
  • python中opencv实现文字分割的实践

    2022-08-02 20:42:48
  • 邮件的协议及服务器工作原理

    2023-11-19 00:48:56
  • Python实现双向链表基本操作

    2022-07-22 10:14:12
  • Python3.6+selenium2.53.6自动化测试_读取excel文件的方法

    2023-04-03 18:41:41
  • mysql创建数据库,添加用户,用户授权实操方法

    2024-01-14 18:16:58
  • 真正保险的“有属性”检测

    2010-03-28 13:25:00
  • asp之家 网络编程 m.aspxhome.com