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

原创 2012年03月23日 11:04:03

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

页: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 从索引的根节点开始沿最左边的指针进行扫描。

下图说明聚集索引的结构





SQL Server数据库的存储过程中定义的临时表,真的有必要显式删除(drop table #tableName)吗?

问题背景 在写SQL Server存储过程中,如果存储过程中定义了临时表, 有些人习惯在存储过程结束的时候一个一个显式地删除过程中定义的临时表(drop table #tName),有些人又没...

本页的SQL例句全部懂了,你的数据库开发所需知识就够用了

--====================简单增删改=========== --查看学生表的全部数据 select * from studio    --插入一个新的学生信息 insert ...

你真的了解位运算?用了这个运算符,算法的时间复杂度竟然降了一个数量级!

其实这个运算符很容易被人忽略,他就是C语言中的位异或运算符^ 位运算符家族中,最常用的,莫过于异或运算符。 我们先看异或运算符的定义: 参与运算的两个值,如果两个相应位相同,则结果为0,否则为1...

MS sql 判断数据库、表、函数、存储过程是否存在

-- 库是否存在 if exists(select * from master..sysdatabases where name=N'库名') print 'exists' else print 'n...

SQL Server判断数据库、表、存储过程、函数是否存在

--1.判断数据库是否存在 IF EXISTS ( SELECT * FROM sys.databases WHERE NAME = '[数据库名]' ...

Sql中判断"数据库"、"表"、"临时表"、"存储过程"和列"是否存在

--判断数据库是否存在 IF EXISTS (SELECT * FROM MASTER..sysdatabases WHERE NAME = '库名') PRINT 'exists ' e...

阿里云真的免费了!免费套餐你用了没?

近两年国内云计算市场的竞争越来越激烈,越来越多的新型公司也开始加入到云计算这个队伍中,与像阿里云、腾讯云、百度云、华为云等大企业争夺市场,从中分一杯梗。 为此,很多企业抢先一步推出长达6个月甚至...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用了SQL这么些年,是否真的了解数据库是怎么存储和查找的呢??
举报原因:
原因补充:

(最多只允许输入30个字)