Are there disadvantages to using VARCHAR(MAX) in a table?
这是我的困境。
基本上,我需要一个表中的列来容纳未知长度的字符。 但是我很好奇,如果在Sql Server中使用列中的VARCHAR(MAX)或NVARCHAR(MAX)会出现性能问题,例如:'This time'我只需要存储3个字符,大多数时候我只需要 存储10个字符。 但是在该列中最多可能有几千个字符,甚至可能是一百万个字符,这是不可预测的。 但是,我可以保证它不会超过2GB的限制。
我只是好奇是否存在任何性能问题,或者可能存在解决此问题的更好方法。
在我看来,您打算将varchar(MAX)数据类型用于其预期用途。
当MAX数据类型中的数据超过8 KB时,将使用溢出页面。 SQL Server 2005自动为页面分配一个溢出指示器,并且知道如何像处理其他数据类型一样操作数据行。
要进一步阅读,请查看联机丛书:char和varchar
您不能在
我已经看到了一些问题-特别是标量函数(但是无论如何,它们通常都是可怕的),它们返回varchar(MAX),然后不进行重铸。例如,假设您有一个特殊函数CleanString(somevarcharmax)返回varchar(max)并在varchar(50)上调用它,但不要CAST(CleanString(varchar10col)AS varchar(10))-讨厌的性能问题。
但是通常,当您在表中有varchar(max)列时,您不应该批量执行这些类型的操作,所以我想说,如果您针对表中的数据需求正确使用了它,那很好。
我前几天刚看过这篇文章。它记录了varchar(max)在varchar(n)列上的性能滞后。可能不足以为您带来改变。但是,如果这样做的话,也许您可??以使用一个单独的表来存储那几个大文本块。您的小文本可以保留在主表中,但是您可以添加一个标志字段,告诉您在新表中查找大文本。
Crystal Reports 12(据我所知,以及其他版本)不能正确处理varchar(max),并将其解释为varchar(255),这会导致报表中的数据被截断。
因此,如果您使用的是Crystal Reports,那对varchar(max)来说是一个缺点。确切地说,还是使用Crystal的缺点。
看到:
http://www.crystalreportsbook.com/Forum/forum_posts.asp?TID=5843&PID=17503
http://michaeltbeeitprof.blogspot.com/2010/05/crystal-xi-and-varcharmax-aka-memo.html
不,varchar(max)会根据条目的大小进行自我调整,因此,如果您要使用大小不同的输入,这将是最有效的。