sqlserver int转varchar_细说SQLServer索引原理

表的存储结构表 -> 分区 -> 堆或B+树 -> 页(数据页、索引页、LOB页,溢出页)表默认只有一个分区(sql server的分区表技术,可以将表进行水平拆分,这样就会产生多个分区)。 分区里面就是存储的数据,有两种存储形式:堆或B+树,具体结构下面细说。、页页是数据存储的最小单位。 页类型分为:数据页、索引页、Log_mixed_page、Lob_tree_page、IA...
摘要由CSDN通过智能技术生成

表的存储结构

表 -> 分区 -> 堆或B+树 -> 页(数据页、索引页、LOB页,溢出页)

表默认只有一个分区(sql server的分区表技术,可以将表进行水平拆分,这样就会产生多个分区)。 分区里面就是存储的数据,有两种存储形式:堆或B+树,具体结构下面细说。、

页是数据存储的最小单位。 页类型分为:数据页、索引页、Log_mixed_page、Lob_tree_page、IAM页面

一个数据页可以存储8K(8192字节,减去96字节的头)大小的数据。数据页里面就是数据行,数据行不能跨页。

疑问:那一行数据可以超过8K吗,超过8K不就跨页了吗?

sql server 2000会有这个限制。sql server 2005 突破了每行8K的限制 但是sql server列的大小,仍不能超过8K(比如你不能定义varchar(9000) 或者 nvarchar(5000));

如果一行数据超出了8K,那么超出8K的字段会存到溢出页上,原数据行上有个指针指向到溢出页。

有人可能会说 varchar(max)、nvarchar(max)、text、image这种类型,其实不然,这种类型是LOB类型。

LOB(large object)是一种用于存储大对象的数据类型,每个LOB可以有2GB。LOB列可以跨多页,并且页不一定是连续的。

区(又叫扩展区)

区(又叫扩展区)是页的集合,一个区包括了8个页,区大小是64K。 注意:这里的区,不是表分区。每个表默认只有一个表分区。

堆结构

堆是一个没有聚集索引的表。表中的数据不按任何字段排序。 用"索引分配映射(IAM)"页将堆的页面联系在一起。如下图所示:

4ea0b759a677882a20fcf84d2ea0c7c5.gif

堆内的数据页和行没有任何特定的顺序;页面也不链接在一起,数据页之间唯一的逻辑连接是记录在IAM页内的信息, 页面与页面之间没有什么紧密的联系;用IAM页查找数据页集合中的每一页。 从数据存储管理上来讲,用堆去管理一个超大的表格是比较吃力的,经常使用的表格上都建立聚集索引。

可以通过扫描 IAM 页对堆进行表扫描或串行读操作来找到容纳该堆的页的扩展盘区。 因为 IAM 按扩展盘区在数据文件内存在的顺序表示它们,所以这意味着串行堆扫描连续沿每个文件进行。使用 IAM 页设置扫描顺序还意味着堆中的行一般不按

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值