Ela*_*nda 66 sql t-sql sql-server
关于SQL Server,我理解:
var
表示内存是惰性分配的,这意味着它完全适合数据(插入时).
MAX
意味着没有尺寸限制\限制.
那么,使用MAX
时总是优先使用varchar
,因为我们无论如何都不分配整个尺寸?
只有在我们想要在此DB列上强制执行约束时,我们才应该使用常量吗?
Abe*_*ler 54
SO User @Remus Rusanu有一篇关于这个主题的非常好的文章.这是我偷了一个snippit,但我建议你读完整个事情:
处理MAX类型(varchar,nvarchar和varbinary)的代码路径与处理其等效非最大长度类型的代码路径不同.非max类型可以在内部表示为普通的指针和长度结构.但是最大类型不能在内部存储为连续的内存区域,因为它们可能会增长到2Gb.所以它们必须由流接口代表,类似于COM的IStream.这延续到涉及最大类型的每个操作,包括简单的分配和比较,因为这些操作在流接口上更复杂.在分配和分配max-type变量的代码中可以看到最大的影响(我的第一个测试),但影响在每个操作上都是可见的.
在文章中,他展示了几个示例,证明使用varchar(n)通常可以提高性能.
你可以在这里找到整篇文章.
Gar*_*ger 15
在这里寻找一个好的答案:
我应该使用varchar(n)还是varchar(MAX)?
简短的回答是,从存储的角度来看,它是相同的,但从查询优化的角度来看,最好使用varchar(N).
只是在这一点上非常明确,答案是否定的.最好使用varchar(N),如果你知道大小不会变化,那么char(N).MAX类型不支持也不支持大多数本机SQL功能,因此您无法添加索引,执行联接或对这些类型进行有效搜索.顺便说一句,这是SQL Server中存在全文搜索功能的一个原因.
此外,varchar(max)阻止对包含varchar(max)字段的整个表执行联机索引的能力.这将显着影响系统的性能.
只有在已知字段大小超过8K时才应使用Varchar(max).在每个其他实例中,必须指定大小.如果不这样做,设计很差,除了最微不足道的系统外,还会导致性能问题.
一些参考: