究竟是什么'每行字节数'在SQL Server最大值中表示。容量规格

时间:2016-02-15 09:21:01

标签: sql-server

请参阅Max Capacity Specs

所以在“每行字节数”旁边'它是8060但后来接近 每个文本字符或nvarchar(最大)列'有2 ^ 31-1。

最大列数为30,000。

我不明白如果其他2个数字(2 ^ 31-1和30,000)如此庞大,一行中只能有8060个字节。

嗯,我想知道我认为可能是什么解释。 当然我可以定义30,000个nvarchar列,但如果其中一个包含长度大约为7500的字符串,则说29,999必须为null。

如果我想在其他29,999列中有一些数据,我需要使用行溢出存储,这会削弱快速搜索的可能性。

(请允许我们不要讨论类型"为什么你需要30,000个列,你需要规范化等等#34;。我的数字只是为了说明我可能完全误解了每行限制8,060字节。)

1 个答案:

答案 0 :(得分:1)

Rows存储在Pages中,页面大小为8KB,扣除了存储系统信息所需的空间后,您有8060字节的数据。行大小限制意味着行不能分割为多个页面。 Text和过时的Image类型存储在“普通”8KB页面之外的特殊类型的页面中。如上所述,溢出常规页面大小的长字符串将移动到另一个特殊类型行溢出存储的页面。仍然存储在“普通”数据页面中的原始row仅保留用于访问具有长数据的外页的密钥。

检查此计算算法以进行表大小估计:<登记/> https://msdn.microsoft.com/en-us/library/ms178085.aspx