VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 数据库 > MongoDB >
  • sql语句大全之数据库存储结构

数据库存储结构
 
 
数据库的存储结构分为逻辑存储结构和物理存储结构。数据库的逻辑存储结构指的是 数据库的性质信息等。SQL Server数据库是由表、视图和索引等各种不同的数据库对象所 组成,它们分别存储数据库的特定信息,构成了数据库的逻辑存储结构。数据库的物理存 储结构则指的是磁盘上存储的数据库文件。
数据库文件由数据库文件和事务日志文件组成,保存在物理介质的NTFS分区或者FAT
分区上,它预先分配了将要被数据库和事务日志所使用的物理存储空间。
3.1.1   数据库文件和文件组
 
SQL Server 2005将数据库映射为一组操作系统文件。数据和日志信息从不混合在相同 的文件中,而且各文件仅在一个数据库中使用。文件组是命名的文件集合,用于帮助数据 布局和管理任务,例如备份和还原操作。
SQL Server 2005数据库具有3种类型的文件:
 
y 主数据文件 主数据文件是数据库的起点,指向数据库中的其他文件。每个数据 库都有一个主数据文件。主数据文件的推荐文件扩展名是.mdf。
y 次要数据文件 除主数据文件以外的所有其他数据文件都是次要数据文件。某些 数据库可能不含有任何次要数据文件,而有些数据库则含有多个次要数据文件。 次要数据文件的推荐文件扩展名是.ndf。
y 日志文件 日志文件包含着用于恢复数据库的所有日志信息。每个数据库必须至 少有一个日志文件,当然也可以有多个。日志文件的推荐文件扩展名是  .ldf。

 
 


 
注  意
SQL Server 2005不强制使用.mdf、.ndf和.ldf 文件扩展名,但使用它们有助于标识文 件的各种类型和用途。
在SQL Server 2005中,数据库中所有文件的位置都记录在数据库的主文件和master数 据库中。大多数情况下,数据库引擎使用master数据库中的文件位置信息。但是,在以下 情况中,数据库引擎使用主文件中的文件位置信息来初始化master数据库中的文件位置项:
 
y    使 用 带 有 FOR   ATTACH 或 FOR   ATTACH_REBUILD_LOG 选 项 的 CREATE DATABASE语句来附加数据库时。关于CREATE DATABASE语句的详细使用,可 以参看附录B。
y    从SQL Server 2000版或7.0版升级到SQL Server 2005时。
y    还原master数据库时。
 
为便于数据库文件的分配和管理,可以将数据库对象和文件一起分成文件组。有两种 类型的文件组:
 
y 主文件组 主文件组包含主数据文件和任何没有明确分配给其他文件组的其他文 件。系统表的所有页均分配在主文件组中。
y    用户定 义文 件组     用 户 定义文 件组 是通过 在 CREATE  DATABASE 或 ALTER DATABASE语句中使用FILEGROUP关键字指定的任何文件组。
 
一个文件不可以是多个文件组的成员。表、索引和大型对象数据可以与指定的文件组 相关联。在这种情况下,它们的所有页将被分配到该文件组,或者对表和索引进行分区。 已分区表和索引的数据被分割为单元,每个单元可以放置在数据库中的单独文件组中。
每个数据库中均有一个文件组被指定为默认文件组。如果创建表或索引时未指定文件 组,则将假定所有页都从默认文件组分配。一次只能有一个文件组作为默认文件组。


 
注  意
日志文件不包括在文件组内。日志空间与数据空间分开管理。
 
SQL Server 2005文件可以从它们最初指定的大小开始,随数据的增加而自动增长。在 定义文件时,可以指定一个特定的增量。每次填充文件时,其大小均按此增量来增长。如 果文件组中有多个文件,则它们在所有文件被填满之前不会自动增长。填满后,这些文件 会循环增长。
每个文件还可以指定一个最大大小。如果没有指定最大大小,文件可以一直增长到用 完磁盘上的所有可用空间。如果SQL Server作为数据库嵌入某应用程序,而该应用程序的 用户无法迅速与系统管理员联系,则此功能就特别有用。用户可以使文件根据需要自动增 长,以减轻监视数据库中的可用空间和手动分配额外空间的管理负担。
3.1.2   页和区
 
在创建数据库对象时,SQL Server会使用一些特定的数据结构给数据对象分配空间, 即页和区。它们和数据库及其文件间的关系如图3.1所示。

 
 
 
 
 
 
数据库
 
 
 
 
数据文件.mdf
或者.ndf                       日志文件.ldf
 
 
 


               
表、索引

区(8个连续页面)

 
 
 
数据页(8KB)
 
最大行长度为8080字节
 
 
图 3.1    数据库的存储结构
 
1. 页
 
SQL Server中数据存储的基本单位是页(page)。为数据库中的数据文件(.mdf或.ndf) 分配的磁盘空间可以从逻辑上划分成页(从0到n连续编号)。磁盘I/O操作在页级执行。也 就是说,SQL Server读取或写入所有数据页。
SQL Server中的所有信息都存储在页上,页是数据库中使用的最小数据单元。每一个 页存储8KB(8192字节)的信息,所有的页都包含一个132字节的页面头,这样就留下8060 字节存储数据。页头被SQL Server用来唯一地标识存储在页中的数据。
SQL Server使用如下几种类型的页:
y    分配页面    用于控制数据库中给表和索引分配的页面。
y    数据和日志页面     用于存储数据库数据和事务日志数据。数据存储在每个页面的 数据行中,每一行的最大值为8060个字节。SQL Server不允许跨页面存储。
y    索引页面    用于存储数据库中的索引数据。
y    分发页面    用于存储数据库中有关索引的信息。
y    文本/图像页面    用于存储大量的文本或者二进制的对象(BLOB),例如,图像。
 
在SQL Server数据页上,数据行紧接着标头按顺序放置。页的末尾是行偏移表,对于 页中的每一行,每个行偏移表都包含一个条目。每个条目记录对应行的第一个字节与页首 的距离。行偏移表中的条目的顺序与页中行的顺序相反,如图3.2所示。

 
 
 
Microsoft  SQL Server数
在SQL Server 2005中,行不能跨页,但是行的部分可以移出行所在的页,因此行实际 可能非常大。页的单个行中的最大数据量和开销是8 060字节(8 KB)。但是,这不包括用 Text/Image页类型存储的数据。在SQL Server 2005中,包含varchar、nvarchar、varbinary或 sql_variant列的表不受此限制的约束。当表中的所有固定列和可变列的行的总大小超过限制 的8 060字节时,SQL Server将从最大长度的列开始动态将一个或多个可变长度列移动到 ROW_OVERFLOW_DATA分配单元中的页。每当插入或更新操作将行的总大小增大到超 过限制的8 060字节时,将会执行此操作。将列移动到ROW_OVERFLOW_DATA分配单元 中的页后,将在IN_ROW_DATA分配单元中的原始页上维护24字节的指针。如果后续操作 减小了行的大小,SQL Server会动态将列移回到原始数据页。
2. 区
 
区(extent)是由8个连续的页面组成的数据结构,大小为8×8KB=64KB。当创建一 个数据库对象时,SQL Server会自动以区为单位给它分配空间。每一个区只能包含一个数 据库对象。
区是表和索引分配空间的单位,如果在一个新建的数据库中创建一个表和两个索引, 并且表中只包含一笔记录,则总共占用3×64KB=192KB的空间。
 
提  示
所有的SQL Server数据库都包含这些数据库结构,简单地说,一个数据库是由文件组 成,文件是由区组成,区是由页面组成。
 
为了使空间分配更有效,SQL  Server不会将所有区分配给包含少量数据的表。SQL
Server有两种类型的区:
y    统一区    由单个对象所有。区中的所有8页只能由所属对象使用。
y    混合区    最多可由8个对象共享。区中8页的每页可由不同的对象所有。
混合区和统一区如图3.3所示。

 
 

 
图 3.3    混合区和统一区(table 表示表,index 表示索引)
 
通常从混合区向新表或索引分配页。当表或索引增长到 8 页时,将变成使用统一区进 行后续分配。如果对现有表创建索引,并且该表包含的行足以在索引中生成 8 页,则对该 索引的所有分配都使用统一区进行。

相关教程