首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Server页面中存储整数数据记录

如何在Server页面中存储整数数据记录
EN

Database Administration用户
提问于 2017-04-21 08:12:11
回答 2查看 222关注 0票数 0

我看到了SQL Server中的8KB (8192 = 96头+ 36行偏移+ 8060空闲空间)页面体系结构。当涉及到在页面中存储数据记录时,我感到困惑。

在下表中,我已经为列ID创建了Integer,它应该采用4字节,但是DBCC页面命令11 Bytes中显示了每个记录大小/长度。

我创建了一个简单的表如下:

代码语言:javascript
运行
复制
CREATE TABLE PAGETEST
(
    ID int primary key
)
GO
INSERT INTO PAGETEST values (200)  

Q1)。为什么一个简单的整数数据占用4个实际字节的数据+7字节额外= 11字节。

Q2)。有人能解释一下一张唱片是怎么在一页里存储的吗?

请查阅以下图片:

EN

回答 2

Database Administration用户

发布于 2017-04-21 16:20:26

要记住的一件重要事情是,行存储表的最小行大小为9字节。您可以在答案和注释这里中看到有关这方面的一些细节。如果要创建示例数据并在页面中进行挖掘,我建议至少创建几个列,以使您所看到的内容更加清晰。否则,您可能会遇到这样一种情况,即具有单个TINYINT列的表所占用的空间似乎与具有单个SMALLINT的表占用的空间相同,这在一开始是没有意义的。

代码语言:javascript
运行
复制
CREATE TABLE dbo.X_TINYINT (ID SMALLINT NOT NULL);
CREATE TABLE dbo.X_SMALLINT (ID SMALLINT NOT NULL);

INSERT INTO dbo.X_TINYINT WITH (TABLOCK)
SELECT TOP (100000) 0
FROM master..spt_values t1
CROSS JOIN master..spt_values t2
OPTION (MAXDOP 1);

INSERT INTO dbo.X_SMALLINT WITH (TABLOCK)
SELECT * FROM dbo.X_TINYINT;

sp_spaceused 'X_TINYINT'; -- 1096 KB reserved

sp_spaceused 'X_SMALLINT'; -- 1096 KB reserved
票数 1
EN

Database Administration用户

发布于 2017-04-21 13:22:29

正如@sabin所提到的,这一点在本文中得到了更好的解释。https://www.sqlskills.com/blogs/paul/inside-the-storage-engine-anatomy-of-a-record/

在页面转储中,如果查看c8的十六进制值,结果是小数为200。这是您插入的数据。

c8000000需要4个字节,这是固定长度的数据。在保罗的博客文章中解释了固定长度数据前后的4 (1000800)和3 (01000)字节。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/171601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档