为什么不将nvarchar(max)用于小字段而不是nvarchar(123)

时间:2014-04-29 14:20:28

标签: sql-server

为什么不将nvarchar(max)也用于小字段而不是nvarchar(123)

我们假设我们没有任何大于4000字节的值。

当我们对较小的字段nvarchar(max)时,性能条款是否有任何差异。或者为什么人们使用nvachar(SOME_FIX_VALUE)

3 个答案:

答案 0 :(得分:2)

最重要的原因是索引。 索引只能大到900字节。因此,使用max,您将永远无法在列上放置索引。 这会给许多人带来性能问题。

另一个原因是保持数据的一致性。许多数据库以其他方式与用户进行通信。它可能是通过Web服务,应用程序或类似的。 固定长度可能是一个业务规则,该领域" region"只能是X个字母长。这意味着如果您使用max,您将永远不会对数据完整性进行任何内置控制,并且必须构建其他安全层。 因此,当您向UI添加验证时,如果导入导致问题,手动编写脚本错误等,会发生什么。

其他原因是数据库引擎处理变量文本。例如,SQL Server中的数据页是8KB页。所以当你开始使用变量文本时,它必须假设。例如,退房:http://technet.microsoft.com/en-us/library/ms190969%28v=sql.105%29.aspx 但是现在我们开始变得非常技术化,然后你可以更好地将它带到Stackoverflow的数据库版本。

编码器/用户的主要原因是我认为的索引。

答案 1 :(得分:1)

是的,有区别。首先,varchar(max)列可能最终存储在行外,作为LOB。其次,你可以欺骗优化器,认为有比实际更多的数据,并且在某些情况下产生次优的查询计划。

答案 2 :(得分:-1)

如果一个包含varchar(max)列的表变为1,000,000行,那么这是一个巨大的表,并且大部分磁盘空间都被浪费了。