这一篇 理解 方向 数据库是怎么存储的
当我们新建一个数据库 会指定路径 生成一个文件 还有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)
好 看不懂 不重要 我也看不懂 你多看几页 发现 下面有一些行的信息内容(这个并不重要 只要知道怎么存储就行)
页的概念我们明白了
我们下一步 讲堆 堆的概念涉及到索引
我单拿出一篇来讲