See 最大容量规格 https://msdn.microsoft.com/en-us/library/ms143432.aspx
因此,“每行字节数”旁边是 8060,但稍后“每个 ntext 或 nvarchar(max) 列的字符数”旁边是 2^31-1。
最大列数为 30,000。
我不明白为什么 1 行只能有 8060 个字节,而其他 2 个数字(2^31-1 和 30,000)如此之大。
好吧,我会尝试一下我认为可能的解释。
当然,我可以定义 30,000 个 nvarchar 列,但如果其中之一包含长度约为 7500 的字符串,那么 29,999 列必须为空。
如果我想在其他 29,999 列中保留一些数据,我需要使用行溢出存储,这会削弱快速搜索的可能性。
(请不要讨论“为什么需要 30,000 列,需要标准化等”类型。我的数字只是为了说明我对每行 8,060 字节限制可能存在的完全误解。)
Rows
存储在Pages
,扣除存储系统信息所需的空间后,页面大小为 8KB,您有 8060 字节的数据。行大小限制意味着行不能拆分为多个页面。Text
和过时的Image
类型存储在“正常”8KB 页面之外的特殊类型页面中。超出常规页面大小的长字符串将被移动到另一种特殊类型的页面行溢出存储正如你提到的。原来的row
仍然存储在“正常”数据页中的数据页仅保留键,以便可以访问具有长数据的外部页。
查看表大小估计的计算算法:
https://msdn.microsoft.com/en-us/library/ms178085.aspx https://msdn.microsoft.com/en-us/library/ms178085.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)