SQL Server varchar 内存使用

Lia*_*ang 0 sql-server

有一栏 field1 varchar(32)

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

提前致谢

Rem*_*anu 5

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

现在更好的问题是这样的值在页面中占据了多少?答案再次不是直接的,因为该值可以以未压缩、行压缩页面压缩列压缩的方式存储。行压缩对 varchar 字段没有影响是真的,但页面压缩有影响。

现在,对于回答类型值在非压缩表中行内占用多少存储空间varchar(32)的直接方法,最好的资源是Inside the Storage Engine: Anatomy of a record。阅读 Paul Randal 的文章后,您将能够回答问题,并证明答案。

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