为varchar或varbinary选择大MAX值的缺点

问题描述:

在创建varchar或varbinary列时为max选择大的值有什么缺点?为varchar或varbinary选择大MAX值的缺点

我正在使用MS SQL,但我认为这也与其他dbs有关。

感谢

这取决于在特定列中存储大量数据是否合理。

如果声明永远不会正确地储存大量数据的列(即雇员的名字为VARCHAR(1000)),你最终得到的各种问题

  1. 许多,如果不是大多数客户端API (即ODBC驱动程序,JDBC驱动程序等)在客户端上分配足够大的内存缓冲区以存储特定列的最大大小。因此,即使数据库只需要存储实际数据,您也可能会显着增加客户端应用程序使用的内存量。
  2. 您从表定义中失去驱动数据验证规则(或传递有关数据的信息)的能力。如果数据库允许使用1000个字符的名字,那么与数据库交互的每个应用程序可能最终都会有自己的规则来规定员工姓名的大小。如果这不是通过在所有应用程序和表之间放置存储过程层来缓解的,则这通常会导致各种应用程序拥有各种规则。
  3. 墨菲法则规定,如果允许1000个字符,某人最终将在该列中存储1000个字符,或者至少有一个值足以导致一个或多个应用程序出错(即没有人检查每个应用程序的员工姓名字段可显示1000个字符)。

您可以将破坏你的应用程序的风险,如果一个大的数据得到了在以某种方式(如从外部接口)和您的应用程序不是设计来处理它。

作为一个好的设计,您应该始终将字段的大小限制在一个现实的值。

取决于RDBMS。 IIRC,MySql为varchar> 255个字符分配2字节开销(以跟踪varchar长度)。 MSSQL < = 2000将允许您分配大于8060字节的行大小,但如果您试图插入或更新实际超过8060字节的行,则会失败。 SQL 2005 [1]允许插入,但会为溢出分配一个新页面,并留下一个指针。显然,这会影响性能。

varchar(max)有些特殊情况,但如果字段的长度大于8000或行大于8060,也会分配溢出页面。这是MSSQL默认值,行为可能会更改与数据行选项中的大类型。