用了SQL这么些年,是否真的了解数据库是怎么存储和查找的呢??

来源:互联网 发布:在淘宝网上怎么开店 编辑:程序博客网 时间:2024/05/21 10:51

数据库:   ( 页)为单位----->从磁盘----》内存

页:1.数据页    2.索引页

数据页----(8KB): 页首(96B),数据行.......,行偏移数组



扩展盘区是一种基本单元,可将其中的空间分配给表和索引。一个扩展盘区是 8 个邻接的页(或 64 KB)。这意味着 SQL Server 2000 数据库每兆字节有 16 个扩展盘区。

为了使空间分配更有效,SQL Server 2000 对只含少量数据的表不分配完整的扩展盘区。SQL Server 2000 有两种类型的扩展盘区:

  • 统一扩展盘区由单个对象所有,扩展盘区中的所有八页只能由拥有该盘区的对象使用。

  • 混合扩展盘区最多可由 8 个对象共享。

通常从混合扩展盘区中向新表或新索引分配页。当表或索引增长到 8 页时,就变成统一扩展盘区。如果在现有表上创建索引,并且该表包含的行足以在索引中生成 8 页,则对该索引的所有分配都在统一扩展盘区内进行。


聚集索引

聚集索引在 sysindexes 内有一行,其 indid = 1。数据链内的页和其内的行按聚集索引键值排序。所有插入都在所插入行中的键值与排序顺序相匹配时执行。

Microsoft® SQL Server™ 2000 将索引组织为 B 树。索引内的每一页包含一个页首,页首后面跟着索引行。每个索引行都包含一个键值以及一个指向较低级页或数据行的指针。索引的每个页称为索引节点。B 树的顶端节点称为根节点。索引的底层节点称为叶节点。每级索引中的页链接在双向链接列表中。在聚集索引内数据页组成叶节点。根和叶之间的任何索引级统称为中间级。

对于聚集索引,sysindexes.root 指向它的顶端。SQL Server 沿着聚集索引浏览以找到聚集索引键对应的行。为找到键的范围,SQL Server 浏览索引以找到这个范围的起始键值,然后用向前或向后指针扫描数据页。为找到数据页链的首页,SQL Server 从索引的根节点开始沿最左边的指针进行扫描。

下图说明聚集索引的结构





原创粉丝点击