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

文件和文件组简介

在SQL Server中,数据库在硬盘上的存储方式和普通文件在Windows中的存储方式没有什么不同,仅仅是几个文件而已。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

结果如下:

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

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

创建和使用文件组

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

创建文件组操作:

创建文件操作:

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

下面给出一个创建索引时,指定存放到文件组的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树组织方式和自己的增长空间。当然也有自己的碎片。
  • 总体来说,多个文件带来的优点是远远大于弊端的。

到此这篇关于SQL Server文件和文件组的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • sql server使用临时存储过程实现使用参数添加文件组脚本复用

    create procedure #pr_CreateFileGroup @dbname nvarchar(max), @filegroupname nvarchar(max) as begin /* 脚本来源:https://www.cnblogs.com/zhang502219048/p/12105527.html 脚本作者:zhang502219048 功能:通过创建临时存储过程拼接SQL语句,实现创建文件组语句可以传递参数,避免写重复代码段,实现脚本代码的封装复用. */ declare

  • SQL server数据库创建代码 filegroup文件组修改的示例代码

    数据库的操作: 1. 对数据文件的操作(添加,删除,修改文件的初始大小,最大大小,步长) 2. 数据库文件的收缩 3. 数据库的只读/读写   read_only只读   read_write可读写   read_only表示只读  read_write表示可读可写 4. 数据库的限制访问(单用户,多用户,限制用户模式) 5.数据库脱机/联机    offline  脱机 alter database love set offline      online 联机    alter databa

  • SQL SERVER 文件和文件组

    1.文件和文件组的含义与关系 每个数据库有一个主数据文件.和若干个从文件.文件是数据库的物理体现. 文件组可以包括分布在多个逻辑分区的文件,实现负载平衡.文件组允许对文件进行分组,以便于管理和数据的分配/放置.例如,可以分别在三个硬盘驱动器上创建三个文件(Data1.ndf.Data2.ndf   和   Data3.ndf),并将这三个文件指派到文件组   fgroup1   中.然后,可以明确地在文件组   fgroup1   上创建一个表.对表中数据的查询将分散到三个磁盘上,因而性能得以提

  • SQLServer中数据库文件的存放方式,文件和文件组

    简介 在SQL SERVER中,数据库在硬盘上的存储方式和普通文件在Windows中的存储方式没有什么不同,仅仅是几个文件而已.SQL SERVER通过管理逻辑上的文件组的方式来管理文件.理解文件和文件组的概念对于更好的配置数据库来说是最基本的知识. 理解文件和文件组 在SQL SERVER中,通过文件组这个逻辑对象对存放数据的文件进行管理. 先来看一张图: 我们看到的逻辑数据库由一个或者多个文件组构成 而文件组管理着磁盘上的文件.而文件中存放着SQL SERVER的实际数据. 为什么通过文件组

  • SQLserver 2005文件和文件组的作用说明

    1.文件和文件组的含义与关系 每个数据库有一个主数据文件.和若干个从文件.文件是数据库的物理体现. 文件组可以包括分布在多个逻辑分区的文件,实现负载平衡.文件组允许对文件进行分组,以便于管理和数据的分配/放置.例如,可以分别在三个硬盘驱动器上创建三个文件(Data1.ndf.Data2.ndf 和 Data3.ndf),并将这三个文件指派到文件组 fgroup1 中.然后,可以明确地在文件组 fgroup1 上创建一个表.对表中数据的查询将分散到三个磁盘上,因而性能得以提高.在 RAID(磁盘冗

  • SQL Server根据分区表名查找所在的文件及文件组实现脚本

    SELECT ps.name AS PSName, dds.destination_idAS PartitionNumber, fg.name AS FileGroupName,fg.name, t.name, f.name as filename FROM (((sys.tables AS t INNER JOIN sys.indexes AS i ON (t.object_id = i.object_id)) INNER JOIN sys.partition_schemes AS ps ON

  • SQL Server中的文本函数和图像函数介绍

    1.查找特定字符串PATINDEX 语法与字符串的patindex一样. 2.获取文本指针TEXTPTR SQLServer在存储文本类型(ntext.text)和图像数据类型(image)时,默认情况是与常见的基本数据类型(如char.int等)这样的数据时单独存储的,也就是说,如果一个表中的字段有基本类型和图像文本类型,那么在输入数据时,基本类型和图像文件数据并不是保存在同一个页面上,而是分离存储的.分离存储后,那么基本类型数据和文本图像类型数据所在的页面就是通过文本指针建立联系,是一个16

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

    文件和文件组简介 在SQL Server中,数据库在硬盘上的存储方式和普通文件在Windows中的存储方式没有什么不同,仅仅是几个文件而已.SQL Server通过管理逻辑上的文件组的方式来管理文件. SQL Server通过文件组对数据文件进行管理.我们看到的逻辑数据库由一个或者多个文件组构成. 结构图如下: 文件组管理着磁盘上的文件,文件中存放的就是SQL Server的实际数据. 为什么通过文件组来管理文件 从用户的角度来说,创建对象时需要指定存储文件组的只有三种数据对象:表,索引和大对象

  • SQL Server误区30日谈 第3天 即时文件初始化特性可以在SQL Server中开启和关闭

    本系列文章是我在sqlskill.com的PAUL的博客看到的,很多误区都比较具有典型性和代表性,原文来自T-SQL Tuesday #11: Misconceptions about.... EVERYTHING!!,经过我们团队的翻译和整理发布在AgileSharp和博客园上.希望对大家有所帮助. 误区 #3: 即时文件初始化特性可以在SQL Server中 a)开启 和 b)关闭 a)是不允许的  b)是允许的 即时文件初始化是一个在SQL Server 2005以及之上的版本鲜为人知的特

  • 如何恢复SQL Server 2000损坏的数据库文件

    SQL Server2000中,如果数据库文件(非系统数据库文件)遇到错误的时候,我们该怎么办.以下是笔者以前的笔记.仅适用于非master,msdb的数据库. 说明如下: 1 建一个测试数据库test(数据库类型为完全)2 建一个表,插入点记录 create table a(c1 varchar(2))goinsert into a values('aa')goinsert into a values('bb')go 3 作完全备份,到文件test_1.bak4 在作一点修改 insert i

  • SQL Server中分区表的用法

    目录 一.分区表简介 二.对表分区的理由 三.分区表的操作步骤 第一步.定义分区函数: 第二步.定义分区构架 第三步.定义分区表 四.分区表的分割 五.分区表的合并 一.分区表简介 分区表是SQL Server2005新引入的概念,这个特性在逻辑上将一个表在物理上分为多个部分.(即它允许将一个表存储在不同的物理磁盘里).在SQL Server2005之前,分区表实际上是分布式视图,也就是多个表做union操作. 分区表在逻辑上是一个表,而物理上是多个表.在用户的角度,分区表和普通表是一样的,用户

  • 一文分析SQL Server中事务使用的锁

    目录 序 SQL Server使用的锁及锁对象 SQL Server执行Select时使用的锁 SQL Server执行insert时使用的锁 SQL Server执行update时使用的锁 总结 序 本文属于基础知识的回顾,在日常技术交流和日常工作中经常发现有些同事了解关于数据库事务的基本知识,会看SQL语句的执行计划,也知道数据库有X锁.U锁和S锁等各种锁,但是对于这些锁在数据库事务执行期间是如何工作?为何这样配合才能完成数据库事务?数据库是如何对于各种资源加锁的?等等这类的问题不太了解,那

  • 在SQL Server中迁移数据的几种方法

    1.通过工具"DTS"的设计器进行导入或者导出 DTS的设计器功能强大,支持多任务,也是可视化界面,容易操作,但知道的人一般不 多,如果只是进行SQL Server数据库中部分表的移动,用这种方法最好,当然,也可以进行全部表的移动.在SQL Server Enterprise Manager中,展开服务器左边的+,选择数据库,右击,选择All tasks/Import Data...(或All tasks/Export Data...),进入向导模式,按提示一步一步走就行了,里面分得很

  • 在SQL Server中使用CLR调用.NET方法实现思路

    介绍 我们一起来做个示例,在.NET中新建一个类,并在这个类里新建一个方法,然后在SQL Server中调用这个方法.按照微软所述,通过宿主 Microsoft .NET Framework 2.0 公共语言运行库 (CLR),SQL Server 2005显著地增强了数据库编程模型. 这使得开发人员可以用任何CLR语言(如C#.VB.NET或C++等)来写存储过程.触发器和用户自定义函数. 我们如何实现这些功能呢? 为了使用CLR,我们需要做如下几步: 1.在.NET中新建一个类,并在这个类里

  • SQL Server中数据行批量插入脚本的存储实现

    无意中看到朋友写的一篇文章"将表里的数据批量生成INSERT语句的存储过程的实现".我仔细看文中的两个存储代码,自我感觉两个都不太满意,都是生成的单行模式的插入,数据行稍微大些性能会受影响的.所在公司本来就存在第二个版本的类似实现,但是是基于多行模式的,还是需要手工添加UNAION ALL来满足多行模式的插入.看到这篇博文和基于公司数据行批量脚本的存储的缺点,这次改写和增强该存储的功能. 本存储运行于SQL Server 2005或以上版本,T-SQL代码如下: IF OBJECT_I

随机推荐