Sql 文本(blob)的效率比varchar/nvarchar';s

Sql 文本(blob)的效率比varchar/nvarchar';s,sql,text,varchar,Sql,Text,Varchar,我们正在为一个相当大的项目制作大量大型但简单的表单(每天大约有600名用户在使用它-这对我来说至少很大;-) 这些表格有很多问答式的部分,所以一些人键入一个句子是很自然的,而另一些人键入一本小说对这些字段中的某些字段设置字符限制有多大好处? (如有必要/可能,请包括引用或引用-谢谢!)

我们正在为一个相当大的项目制作大量大型但简单的表单(每天大约有600名用户在使用它-这对我来说至少很大;-)

这些表格有很多问答式的部分,所以一些人键入一个句子是很自然的,而另一些人键入一本小说对这些字段中的某些字段设置字符限制有多大好处?


(如有必要/可能,请包括引用或引用-谢谢!)


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

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

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

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

来源:

文本和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

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


我在墙上挂了一幅巨大的空白漫画,上面写着“不是软件做什么,而是用户做什么”。

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

如果您使用MySql,使用固定长度字段将表保持在静态模式在速度上肯定有优势,但是如果您有任何可变宽度字段,表将切换到动态,您将失去指定字段长度的好处


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

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


最后,在变量列上指定最大长度主要是为了约束数据库的增长大小。一旦您使用可变长度列,您就失去了固定大小行的优势,当保存相同数量的数据时,varchar(max)将执行与varchar(10)相同的操作。

“这些字段不能用于任何比较语句。”哪些数据库具有此限制?MySQL和SQLite没有问题。。。当然,这些操作有些慢,索引必须有长度限制(至少在MySQL中)。对不起,我刚才说的是SQL server。您可以将其转换回n/varchar,但这样做的费用,再加上数据丢失的风险意味着这样做是不值得的。哪个版本的SQL Server?至少在2000年及以后这样做是完全可以接受的。这可能是7.0中的一个问题,但我手头没有7.0测试服务器可以确认。以下内容在SQL 2000上运行:从dbo.My_表中选择*,其中My_text_列(如“%test%”)无需指定。。。通过比较,我猜您指的是严格的比较器,它不起作用。在SQL Server中,不能在TEXT和NTEXT类型的列上创建检查约束。