仅使用NVarchar(100)与NVarchar(255)的10个字符的存储命中是什么?



我需要在可用的磁盘空间与预期的数据大小之间取得平衡。当有未使用的空间时,会发生什么样的存储空间?

示例:"狗"存储在nvarchar(10(与nvarchar(100(中。如果我计划最糟糕的情况,然后选择nvarchar(100(而不是nvarchar(10(,如果我选择nvarchar(100((100(?

,将浪费多少额外的磁盘空间。

nvarchar存储大小为每个char 2个字节2个字节。列的最大长度无关紧要 - 存储大小由实际数据确定。

官方文档:

nvarchar [(n | max(] 可变长度Unicode字符串数据。n定义字符串长度,可以是1到4,000的值。最大值表示最大存储大小为2^30-1字符。字节中的最大存储大小为2 GB。实际存储大小在字节中,是输入字符 2个字节的两倍。 nvarchar的ISO同义词是全国性char的变化,民族字符变化。

(强调我的(

但是,请不要考虑将nvarchar(max)用于所有内容的建议。由于max的处理方式不同,因此具有一些讨厌的副作用(性能命中(。

一般而言,您应该根据估计的实际数据大小选择列最大尺寸。为了安全起见,您可能只想将最大尺寸设置为预期尺寸的两倍。

如果您知道您只使用单个ASCII支持的语言,则应考虑使用varchar而不是nvarchar,因为它的存储大小是nvarchar的存储大小的一半:

varchar [(n | max(] 变量长度,非unicode字符串数据。n定义字符串长度,可以是1到8,000的值。最大值表示最大存储大小为2^31-1字节(2 GB(。存储大小是输入的数据的实际长度 2个字节。 varchar的ISO同义词是char vary charvarying或cartaravarying

(再次,重点是我的(

据我所知,正如Zohar所提到的,存储的差异很小。


you ,但是,请参阅对查询内存赠款的潜在影响,因此请参阅服务器的整体性能。由于查询引擎实际上不知道这些较大的字符串列的实际程度,因此它试图分配可能足够的内存,假设有许多填充列。

要进一步阅读,请转到此处。

最新更新