最近看了关于 SQL SERVER 数据库 数据页大小的算法
使用SQL 脚本测试 发现有疑惑!!
Code
if object_id('tab') is null
create table tab
(
[uID] char(20),
[uName] char(80)
)
else
truncate table tab
--插入数据
DECLARE @i INT
SET @i=1
WHILE @i<=71
BEGIN
INSERT INTO tab ([uID],[uName]) VALUES('idnum','admin');
SET @i=@i+1
END
--查看占用空间
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('tab')
正常情况下数据页算法 是页头 96字节 每行大小=20+80+两个状态位(2字节)+定长数据类型(2字节)+定长列数占用空间(2字节)+NULL视图(列数/8=1)+行偏移(2字节)=109字节
一页数据8k=8192字节
用于数据行=8192-96=8096
所以一页能容纳8096/109=74.2(74行数据)
但实际上只能容纳71行数据!!!
希望高手解答一下啊