Sqlserver 高级篇 数据存储(堆概念,索引)

mac2025-06-05  23

Sqlserver 高级篇 理解存储原理 (数据库页概念)

接上一篇 我们理解了 数据存储 页的概念 

我们说一下 堆

如果我们有大量数据 也就有的大量的页 存在数据库里

数据库会有一种页来记录数据存储在哪里  (叫IAM索引分布映像页)

这个页什么意思那 假如 有1000条数据 存储到了 表里 

这个表生成了32个页 那就是 正好4个区  IAM就会存储 那些数据存储到了那个区  

举栗子 如果我把数据都删掉 重新 插入300条

IAM记录 这300条 会插入到100这个区里 状态为1  1区满了

如果再来300条 就会记录 都存101了  102还有地方

如果 删除掉 第一次插入的300条 IAM里100区就变成0  下次存储的数据 就会到100里来

所以 我们查询数据的时候 先查IAM索引表 在去查 区 在去查页 ~ 

这种没有按照任何条件排序要求(没有索引)来存储数据的方式 就叫 堆  有地方我就放 堆一起去

所以 查询的时候  数据库 需要遍历所有IAM页  所有的区 所有页 查询数据 因为数据是堆在一起的 

 

IAM表也有最大数据量限制 限制是4G

如果数据量超过4G 就会在出现一个IAM页

第一个IAM页会记录第二个IAM页位置信息 连贯起来  所以 找到第一个IAM页 后面一切都能找到

 

理论就这么多 

那么怎么在sqlserver 里看到IAM页

indid 为0  就是没有索引

select * from sys.sysindexes where id= (select object_id From sys.all_objects where name='TStudent')

 

看了这一篇 知道为什么不加索引 你的数据查询起来会卡把!!!!!

最新回复(0)