0

有一个专栏field1 varchar(32)

如果我只在此字段中存储“ABC”,则需要 3 个字节。当 SQL Server 访问该列并将其缓存在内存中时,它需要多少内存?3字节还是32字节,如何证明你的答案?

提前致谢

4

2 回答 2

5

SQL Server 不会缓存该列。它将缓存恰好包含该值的整个页面,因此它将始终缓存 8192 字节。页面的位置取决于内存储与行溢出存储以及列是否稀疏等因素。

现在一个更好的问题是这样一个值在页面中占据了多少?答案也不是直截了当的,因为该值可以存储为 uncompressed、row-compressedpagecompressedcolumn-compressed。确实,行压缩对 varchar 字段没有影响,但页面压缩确实如此。

现在,对于回答类型值在非压缩表中的行内占用多少存储空间varchar(32)的直接方式,最佳资源是存储引擎内部:记录剖析。阅读 Paul Randal 的文章后,您将能够回答问题,并证明答案。

此外,您必须考虑以该列作为键或包含该列的任何二级索引。

于 2012-08-01T12:08:35.737 回答
0

平均为其申报规模的 50%。这方面有很多文档。这是我从How are varchar values stored in a SQL Server database?

于 2012-08-01T09:37:10.710 回答