我想知道在性能,内存和其他任何需要考虑的因素方面使用varchar(500)和varchar(max)时的优缺点是什么?
在sql server 2000/2005/2008的情况下答案是否有所不同?
sha*_*mar 31
在SQL Server 2000和SQL Server 7中,行的大小不能超过8000个字节.这意味着VARBINARY列只能存储8000个字节(假设它是表中唯一的列),VARCHAR列最多可存储8000个字符,NVARCHAR列最多可存储4000个字符(每个unicode字符2个字节).此限制源于SQL Server用于将数据保存到磁盘的8 KB内部页面大小.
要在单个列中存储更多数据,您需要使用TEXT,NTEXT或IMAGE数据类型(BLOB),这些数据类型存储在8 KB数据页的集合中,这些数据页与存储其他数据的数据页分开.同桌.这些数据页以B树结构排列.BLOB难以使用和操作.它们不能用作过程或函数中的变量,也不能在REPLACE,CHARINDEX或SUBSTRING等字符串函数中使用.在大多数情况下,您必须使用READTEXT,WRITETEXT和UPDATETEXT命令来操作BLOB.
为了解决这个问题,Microsoft在SQL Server 2005中引入了VARCHAR(MAX),NVARCHAR(MAX)和VARBINARY(MAX)数据类型.这些数据类型可以保存BLOB可容纳的相同数量的数据(2 GB),它们是存储在用于其他数据类型的相同类型的数据页中.当MAX数据类型的数据超过8 KB时,使用溢出页面.SQL Server 2005自动为页面分配溢出指示器,并且知道如何操纵数据行的方式与操作其他数据类型的方式相同.您可以在存储过程或函数内声明MAX数据类型的变量,甚至将它们作为变量传递.您也可以在字符串函数中使用它们.
Microsoft建议在SQL Server 2005中使用MAX数据类型而不是BLOB.实际上,在SQL Server的未来版本中不推荐使用BLOB.
图片来源:http://www.teratrax.com/articles/varchar_max.html
在SQL Server 2005和SQL Server 2008中,VARCHAR(MAX)的最大存储大小为2 ^ 31-1个字节(2,147,483,647字节或2GB - 1个字节).存储大小是输入的实际数据长度+ 2个字节.输入的数据长度可以是0个字符.由于VARCHAR数据类型中的每个字符使用一个字节,因此VARCHAR(MAX)数据类型的最大长度为2,147,483,645.
非常有趣的读物:http://www.sql-server-helper.com/faq/sql-server-2005-varchar-max-p01.aspx
参考:http://msdn.microsoft.com/en-us/library/ms143432.aspx
| 归档时间: |
|
| 查看次数: |
22351 次 |
| 最近记录: |