欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SQL Server数据库的存储机制讲解

程序员文章站 2023-10-31 23:59:52
SQL Server存储机制 1、区段 区段(extent)是用来为表和索引分配空间的基本存储单元。它由8个连续的64KB数据页组成。 基于区段(而不是实际使用空间)分配空间...

SQL Server存储机制

1、区段

区段(extent)是用来为表和索引分配空间的基本存储单元。它由8个连续的64KB数据页组成。

基于区段(而不是实际使用空间)分配空间的概念的要点:

一旦区段已满,那么下一记录将要占据的空间不是记录的大小,而是整个新区段的大小。一次分配一个区段而不是分配一个记录。

通过预分配空间,SQL Server节省为每个记录分配新空间的时间。

向当前分配的区段添加了过多的行就要占用整个区段,看起来是一种浪费,但是这种方法浪费的空间不多。但是,这些浪费的空间会累加,特别是在碎片较多的环境中。

占据所有空间的好处是SQL Server省去了一些分配时间的系统开销,不需在每次写入行时都考虑分配问题,SQL Server仅仅当需要新区段时才处理额外的空间分配。

不要将区段占用的空间和数据库占用的空间想混淆,分配给数据库的那些空间就是磁盘驱动器将要减少的可用空间。区段仅仅是在又数据库保留的整个空间内再次进行分配的方式。

2、页

页是特定区段中的分配单元。每个区段包含8页。

也是在到达实际数据行前所能达到的最后一个存储级别。尽管每个区段中的页数是固定的,但是每一页中的行数不是固定的。这取决于行的大小,而行的大小是可以变化的。可以把页看做是表行和索引行数据的容器。通常不允许跨行。

常用的页类型:

1、数据页:数据也是不需解释的-它们是表中的实际数据,但任何没有用text in row选项、varchar(max)或varbinary(max)定义的BLOB数据除外。

2、索引页:索引页也是相当直观-它们既包括非群集索引的非页级和页级页,又包括群集索引的非页级页。

在SQL SERVER中,存储的最小单位是页。SQL SERVER对于页的读取,要么整个读取,要么完全不读取,没有折中。

数据库页的大小是8K,实际能够存储的数据量为1024*8=8192-页头(96)-行偏移(36)=8060字节。

页拆分

当页满时,它会进行拆分。这意味着多个新页被分配-也意味着现有页上又近半的数据被移到新页上。

在使用群集索引时,会有例外。如果有一个群集索引,并且下一个插入的记录在物理上将作为表中的最后一个记录,那么创建一个新页,然后将该新行添加到这个新页中,而不需要重新定位任何现有数据。

3、行

行就是表中的一行记录。行最大可达8KB。除了8060字符限制外,还有最大1024标准列(非稀疏列)的限制,列就是表的一列数据,就是你理解的列。实际上,突破8060字符限制前用完列的情况不多见。1024提供了小于8字节的平均列宽度。1024个列,一个表通常才十几个列啊。当突破了1024个列时,就要运用到稀疏列。

4、稀疏列

稀疏列是SQL Server2008新引入的一种特殊的数据结构。它们主要用于处理重复的场景,其中的列只是偶尔会用到。大部分时候为空。许多时候,一旦遇到少量这类列,就意味着以后可能会遇到大量这类列。使用稀疏列,可以将单个表中允许的列的总数提高到30000。30000个列,什么概念?什么系统用得到这么多列。

Image、text、ntext、geography、geometry、timestamp和所有用户自定义数据类型不能被标记为稀疏列。