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

SQLserver 专栏收录该内容
50 篇文章 1 订阅

这一篇 理解 方向 数据库是怎么存储的

当我们新建一个数据库  会指定路径 生成一个文件 还有log

也可以增加行数据  这里叫 BDBASE2 大部分我们新建的时候都会放在一个行数据

页概念

好我们知道怎么创建一个数据库了 

现在拿一个数据库来举栗子(testDB62)

 我们打一下 这个命令  可以看到数据库文件的相信信息

数据库存储文件ID为1 log为2 如果像上图一样的数据库文件 会有ID为3的数据

 sp_helpdb 数据库名

 

那数据库是怎么内部是怎么实现保存的那

首先 数据库文件 结构

数据库存储数据的时候 会把 数据分成很多也 一个页8Kb  8个页为一组 叫区(或扩展) 

1:代表就是数据库存储文件ID

页里面的格式 这标头 加上数据 

在数据库里 1K = 1024Byte字节

那么一页一共能存储1024*8 的字节 也就是 8192字节

那么标头占用 96字节  8192 - 96 = 8096 byte 这就是全部用来存储数据的

那么我们再看一行数据的内容占多少字节那

testDB62数据库里 有TS表 

 

那么行字节怎么看  就是类型了

int为1

那么就是1+10+10+11+10+10 =52 Byte

那么一行数据的字节就是52 Byte

如果是2000条 就是 52*2000=104000字节

那就是一页能存多少条记录 就用 8096/ 52 = 155.69 数据没办法存半条数据就是 155条

那么要用多少页来存储 2000条数据那 2000/155 = 12页

12*8KB= 96KB  ST的表 需要占用 96KB空间

那么 我们看一下 TS的数据因为只有一条 就应该占一页 不急 我还有一个TStudent表 里面数据很多

TS

TStudent

查询页语句

  SELECT OBJECT_NAME(i.object_id) as 表名, data_pages as 数据页数
  from sys.indexes as i
  Join sys.partitions as p on p.object_id = i.object_id and p.index_id= i.index_id
  join sys.allocation_units as a on a.container_id = p.partition_id
  where i.object_id = OBJECT_ID('TStudent')

 

好 我们来看看 在数据库里看看页的实际内容 

//打开跟踪  
dbcc traceon(3604);
//打开  testDB62 数据库 ,第1个数据库文件的, 第9页  ,1数据呈现
dbcc page(testDB62,1,9,1)

好 看不懂 不重要 我也看不懂  你多看几页 发现 下面有一些行的信息内容(这个并不重要 只要知道怎么存储就行)

 

页的概念我们明白了

我们下一步 讲堆 堆的概念涉及到索引 

我单拿出一篇来讲

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

  • 1
    点赞
  • 0
    评论
  • 5
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:撸撸猫 设计师:马嘣嘣 返回首页

打赏作者

小慧哥

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值