有一个专栏field1 varchar(32)
如果我只在此字段中存储“ABC”,则需要 3 个字节。当 SQL Server 访问该列并将其缓存在内存中时,它需要多少内存?3字节还是32字节,如何证明你的答案?
提前致谢
有一个专栏field1 varchar(32)
如果我只在此字段中存储“ABC”,则需要 3 个字节。当 SQL Server 访问该列并将其缓存在内存中时,它需要多少内存?3字节还是32字节,如何证明你的答案?
提前致谢
SQL Server 不会缓存该列。它将缓存恰好包含该值的整个页面,因此它将始终缓存 8192 字节。页面的位置取决于行内存储与行溢出存储以及列是否稀疏等因素。
现在一个更好的问题是这样一个值在页面中占据了多少?答案也不是直截了当的,因为该值可以存储为 uncompressed、row-compressed、pagecompressed或column-compressed。确实,行压缩对 varchar 字段没有影响,但页面压缩确实如此。
现在,对于回答类型值在非压缩表中的行内占用多少存储空间varchar(32)
的直接方式,最佳资源是存储引擎内部:记录剖析。阅读 Paul Randal 的文章后,您将能够回答问题,并证明答案。
此外,您必须考虑以该列作为键或包含该列的任何二级索引。
平均为其申报规模的 50%。这方面有很多文档。这是我从How are varchar values stored in a SQL Server database?