SQL Server中的文件和文件组介绍
作者:springsnow 发布时间:2024-01-14 06:57:45
文件和文件组简介
在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树组织方式和自己的增长空间。当然也有自己的碎片。
总体来说,多个文件带来的优点是远远大于弊端的。
来源:https://www.cnblogs.com/kissdodog/p/3156166.html


猜你喜欢
- Conv2d的简单使用torch 包 nn 中 Conv2d 的用法与 tensorflow 中类似,但不完全一样。在 torch 中,Co
- 一、打开摄像头import cv2import numpy as npdef video_demo(): capture = c
- 很久没有更新blog了,这段时间实在是发生了很多的事,累身累心。但还是有很多想做的事,比如更新merceCSS、把一直以来所总结的有关模块化
- 语言的问题,见仁见智,基本上属于信仰,无法强求一致。不过作为Python的爱好者,我想在这里为Python做一点辩护。就语法来看,Pytho
- 场景产品中有一张图片表pics,数据量将近100万条,有一条相关的查询语句,由于执行频次较高,想针对此语句进行优化表结构很简单,主要字段:u
- 一、系统要求电影售票系统程序,应具备以下几点功能:1.用户认证系统用户分为用户、管理员两个角色,系统可根据不同用户角色权限进入不同界面,所有
- 列举了一些常见,新手经常问的问题。举例并说明解决方法。1.超链接访问过后hover样式就不出现的问题运行代码框<!DOCTYPE ht
- GO的条件变量一、条件变量与互斥锁条件变量是基于互斥锁的,它必须基于互斥锁才能发挥作用;条件变量并不是用来保护临界区和共享资源的,它是用来协
- 通常文本设置要不在wxml中设置,再要不就是通过weml绑定在js中设置文字。wxml<view > <text>我
- 如果遇到下述错误,表示当启动mysqld时或重新加载授权表时,在用户表中发现具有非法密码的账户。发现用户'some_user'
- 有时候有很多逗号,这样我们就不好处理了,下面的函数就是将多个逗号替换为一个逗号,方便后面的处理。<script language=&q
- 比如做一些高级的配置,还比如在客户端或远程执行数据库操作等工作时,ISQL是很方便的。比如入侵一台有SQL服务的主机,入侵SQL Serve
- 1、打开文件得到文件句柄并赋值给一个变量2、通过句柄对文件进行操作3、关闭文件示例文件'你好呀'我是于超嗯再见文件操作基本流
- Geany中配置python的方法:一、文件下载并安装1、下载Python下载地址:https://www.python.org/downl
- 特征选择时困难耗时的,也需要对需求的理解和专业知识的掌握。在机器学习的应用开发中,最基础的是特征工程。——吴恩达1.数据预处理数据预处理需要
- 前言现在系统的各种业务是如此的复杂,数据都存在数据库中的各种表中,这个主键啊,那个外键啊,而表与表之间就依靠着这些主键和外键联系在一起。而我
- 记得导入包,其他按键可类比def keyPressEvent(self, event): if event.key() == Q
- 一 程序预览本程序已经写了多年, 很久没用, 不过刚运行了下竟然还可以成功运行. 先来张运行结果图.二 最近的滴滴APP已经可以支持设置自动
- 本文实例讲述了Python flask框架post接口调用。分享给大家供大家参考,具体如下:from flask import Flask,
- 这篇文章主要介绍了python如何实现不可变字典inmutabledict,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参