1、区段

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

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

  1.   一旦区段已满,那么下一记录将要占据的空间不是记录的大小,而是整个新区段的大小。一次分配一个区段而不是分配一个记录。
  2.   通过预分配空间,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和所有用户自定义数据类型不能被标记为稀疏列。

SQL Server存储机制的更多相关文章

  1. sql server 存储机制

    1.区段 区段(extent)是用来为表和索引分配空间的基本存储单元.它由8个连续的64KB数据页组成. 基于区段(而不是实际使用空间)分配空间的概念的要点: 一旦区段已满,那么下一记录将要占据的空间 ...

  2. SQL Server存储机制二

    http://blog.csdn.net/ltylove2007/article/details/21084585 http://www.cnblogs.com/anding/p/3254674.ht ...

  3. SQL SERVER存储引擎——04.数据

    4. SQL SERVER存储引擎之数据篇 (4.1)文件 (0)主数据文件.mdf初始文件大小至少为3MB,次要数据文件.ndf初始大小,同日志文件一样至少为512KB: (1)SQL SERVER ...

  4. SQL Server存储ntext截断问题

    SQL Server存储ntext截断问题   最近遇到一个问题:将大文本存储到数据库的时候,查询出来的文本却被截断了. 最后百度发现,作者提出 sql server management studi ...

  5. 转 一篇关于sql server 三种恢复模式的文章,从sql server 的机制上来写的,感觉很不错,转了

    简介 SQL Server中的事务日志无疑是SQL Server中最重要的部分之一.因为SQL SERVER利用事务日志来确保持久性(Durability)和事务回滚(Rollback).从而还部分确 ...

  6. SQL Server 锁机制 悲观锁 乐观锁 实测解析

    先引入一些概念,直接Copy其他Blogs中的,我就不单独写了. 一.为什么会有锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 1.丢失更新 A,B两个用户读同一数据并进行修改,其中 ...

  7. SQL Server 存储中间结果集

    在SQL Server中执行查询时,有一些操作会产生中间结果集,例如:排序操作,Hash Join和Hash Aggregate操作产生的Hash Table,游标等,SQL Server查询优化器使 ...

  8. SQL Server 存储(1/8):理解数据页结构

    我们都很清楚SQL Server用8KB 的页来存储数据,并且在SQL Server里磁盘 I/O 操作在页级执行.也就是说,SQL Server 读取或写入所有数据页.页有不同的类型,像数据页,GA ...

  9. SQL Server 存储(3/8):理解GAM和SGAM页

    我们知道SQL Server在8K 的页里存储数据.分区就是物理上连续的8个页.当我们创建一个数据库,数据文件会被逻辑分为页和区,当用户对象创建时,页会分配给它用来存储数据.GAM(Global Al ...

随机推荐

  1. 前端JSON使用总结

    JSON: JavaScript Object Notation(JavaScript 对象表示法)的简称. 1. 什么是 JSON ? JSON 指的是 JavaScript 对象表示法(JavaS ...

  2. HDU3996 Gold Mine(最大权闭合子图)

    #include<cstdio> #include<cstring> #include<queue> #include<algorithm> using ...

  3. ural 1245. Pictures

    1245. Pictures Time limit: 1.0 secondMemory limit: 64 MB Artist Ivanov (not the famous Ivanov who pa ...

  4. Java中的线程

    http://hi.baidu.com/ochzqvztdbabcir/item/ab9758f9cfab6a5ac9f337d4 相濡以沫 Java语法总结 - 线程 一 提到线程好像是件很麻烦很复 ...

  5. UIView 周围出现黑线的解决方法

    myView.clipsToBounds = YES;

  6. TYVJ P1037 阶乘统计2 Label:坑

    描述 n的阶乘定义为n!=1*2*3*……*n 如3!=6 n!通常最后会有很多0,如5!=120 最后有一个0,现在统计n!去除末尾的0后,最后k位是多少  输入格式  第一行包括两个数n,k  输 ...

  7. mysql中datetime比较大小问题 (转的)

    方法一: 你也可以:select * from t1 where unix_timestamp(time1) > unix_timestamp('2011-03-03 17:39:05') an ...

  8. 8.20 css样式表:样式分类,选择器。样式属性,

    样式表分类: 1.内联样式表, 和html联合显示,例:<p style="font-size:14px;">内联样式表</p> 2.内嵌样式表 作为一个独 ...

  9. dos界面下执行java文件将错误输出到一个文本小技巧

    如果dos下执行java出现错误,把错误记录到一个文档 正确时如图,输出结果为hello,我把String的s改为小写,出现错误,用2>命令输出到error.txt在当前目录就出现了error. ...

  10. WPF 中Frame + Page 的使用

    1 在window 的设计的时候 ,中间需要进行页面切换的时候,顶一个Frame <Frame Name="MainPage"  NavigationUIVisibility ...