繁体   English   中英

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

[英]Disadvantage of choosing large MAX value for varchar or varbinary

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

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

谢谢

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

如果您声明一个永远不会正确存储大量数据的列(即员工名字作为VARCHAR(1000)),您最终会遇到各种问题

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

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

[1] varchar(max)在某种程度上是一种特殊情况,但如果字段长度> 8000或行> 8060,也会分配溢出页面。这是MSSQL默认值,行为可以随大型类型而变化在数据行选项中。

如果以某种方式获得大量数据(例如来自外部接口)并且您的应用程序不是为处理它而设计,则可能会增加破坏应用程序的风险。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM