6

我们正在为一个相当大的项目(大约 600 个用户全天使用它 - 至少对我来说很大 ;-) 做很多大而简单的表单。

这些表格有很多问答类型的部分,因此有些人很自然地键入句子,而另一些人则键入小说。 对其中一些字段设置字符限制真的有多大好处?

(如有必要/可能,请包括参考资料或引文 - 谢谢!)

4

5 回答 5

5

如果您对数据大小没有限制,那何必担心。这听起来不像是一个关键任务项目,即使有 600 个用户和数千条记录。使用 CLOB/BLOB 并完成它。我怀疑您是否会在限制大小和冒数据丢失风险方面看到任何重大收益。也就是说,您应该在实施之前布局此类边界。

通常 varchar 最适合存储您希望在逻辑上使用的值并对其执行“全值”比较。文本用于非结构化数据。如果您的项目是带有非结构化文本的调查结果,请使用 CLOB/BLOB

半参考:我有时会处理数十万条呼叫中心记录,在这些记录中我们使用 CLOB 来存储员工和客户之间的对话。

于 2008-10-28T13:24:28.563 回答
4

我说,关注用户的需求,只在/如果出现这些问题时担心数据库性能问题。问问自己“如果我限制他们可以输入的数据量,我的用户是否会受益”。

我在墙上挂了一幅巨大的空白卡通片,上面写着“这不是软件所做的,而是用户所做的”。

于 2008-10-28T14:09:12.670 回答
3

你没有提到你正在使用哪个 sql server

如果您使用的是 MySql,则使用固定长度字段将表格保持在静态模式在速度方面具有明显优势,但是如果您有任何可变宽度字段,表格将切换为动态表格,您将失去指定字段长度的好处.

http://dev.mysql.com/doc/refman/5.0/en/static-format.html
http://dev.mysql.com/doc/refman/5.0/en/dynamic-format.html

当您使用固定长度的列时,Microsoft SQL Server 具有类似的性能提升。对于固定长度的列,服务器确切地知道行中数据的偏移量和长度是多少。对于可变长度列,服务器知道偏移量,但必须将数据的实际长度存储为前面的 2 字节计数器。这有几个含义,在这篇有趣的文章中讨论了性能作为磁盘空间的函数以及可变长度列的优点。

如果您使用的是 SQL Server 2005 或更新版本,则可以利用 varchar(max)。此列类型具有与 BLOB 相同的 2GB 存储容量,但数据与表数据页一起存储在 8K 块中,而不是单独存储。因此,您获得了大尺寸优势,一次只在页面中使用 8K,快速访问数据库引擎,并且与其他列类型一起使用的相同查询语义与 varchar(max) 一起使用。

最后,在变量列上指定最大长度主要可以让您限制数据库的增长大小。一旦使用可变长度列,您将失去固定大小行的优势,并且 varchar(max) 在保存相同数量的数据时将执行与 varchar(10) 相同的操作。

于 2008-12-02T20:06:39.867 回答
2

blob 和 text/ntext 存储在行上下文之外,并且仅存储对对象的引用,从而导致更小的行大小,这将提高聚簇索引的性能。

但是由于 text/ntext 不存储与行数据检索需要更长的时间,并且这些字段不能在任何比较语句中使用。

于 2008-10-28T13:23:09.063 回答
1

来自: http: //www.making-the-web.com/2008/03/24/saving-bytes-efficient-data-storage-mysql-part-1/

影响大小的 TEXT 和 BLOB 类型有一些变体;他们是:

Type -                      Maximum Length -Storage
TINYBLOB, TINYTEXT          255             Length+1 bytes
BLOB, TEXT                  65535           Length+2 bytes
MEDIUMBLOB, MEDIUMTEXT      16777215        Length+3 bytes
LONGBLOB, LONGTEXT          4294967295      Length+4 bytes
于 2008-10-28T13:28:34.357 回答