有一列field1 varchar(32)
如果我只在此字段中存储'ABC',则需要3个字节。当SQL Server访问此列并将其缓存在内存中时,需要多少内存? 3个字节或32个字节,以及如何证明你的答案?
提前致谢
答案 0 :(得分:4)
SQL Server不会缓存该列。它将缓存恰好包含该值的整个页面,因此它将始终缓存8192个字节。页面的位置取决于in-row与row-overflow存储之类的内容以及该列是否为sparse。
现在一个更好的问题是这个值在页面中占多少?答案再次不是直截了当的,因为该值可以未压缩,row-compressed,page compressed或column-compressed存储。确实行压缩对varchar字段没有影响,但页面压缩确实如此。
现在,为了直接回答 varchar(32)
类型值在非压缩表格中占据行内的存储空间,最佳资源为Inside the Storage Engine: Anatomy of a record。阅读完Paul Randal的文章后,您将能够回答这个问题,并证明答案。
此外,您必须考虑将此列作为键或包含此列的任何二级索引。
答案 1 :(得分:0)
平均声明尺寸的50%。关于这方面有很多文档。这是我从How are varchar values stored in a SQL Server database?
中提取的地方