在什么时候使用文本字段比在SQL Server中使用nvarchar字段更有效?

时间:2011-05-12 03:32:50

标签: sql sql-server sql-server-2005 tsql nvarchar

在最好在SQL Server中使用文本字段之前,nvarchar字段需要多长时间?将一种或另一种用于可能会或可能不会被查询的文本内容的一般指示是什么?

3 个答案:

答案 0 :(得分:7)

据我了解,SQL 2005+中绝不应使用TEXT数据类型。您应该开始使用VARCHAR(MAX)

请参阅this question关于VARCHAR(MAX)TEXT的对比。

更新(每条评论):

This blog在解释优势方面做得很好。取自它:

  

但是在尝试查询时会出现使用类型文本的痛苦。例如,无法按文本类型进行分组。

     

使用文本类型的另一个缺点是磁盘IO增加,因为每个记录现在都指向blob(或文件)。

基本上,VARCHAR(MAX)会将数据与记录保持在一起,并使您能够像其他VARCHAR类型一样对待它,例如使用GROUP BY和字符串函数({{1} },LEN等。)。

对于CHARINDEX,您几乎总是必须将其转换为TEXT以使用针对它的函数。

但回到关于效率的问题的根源,我认为使用VARCHARTEXT的效率并不高。查看this MSDN article(搜索“数据类型”),{@ 1}}已弃用,应替换为VARCHAR(MAX)。

答案 1 :(得分:3)

首先,根本不要使用文字。 MSDN says:

  

ntext,text和image数据类型会   将来的版本中删除   Microsoft SQL Server。避免使用   这些数据类型在新开发中   工作,并计划修改应用程序   目前使用它们。使用   nvarchar(max),varchar(max)和   varbinary(max)代替。

varchar(max)是您可能需要的。

如果比较varchar(n)和varchar(max),这些技术上是两种不同的数据类型(存储方式不同):

  • varchar(n)值始终存储在行内。这意味着它不能大于最大行大小,并且行不能大于页面大小,即8K。

  • varchar(max)存储在行的大小上。 Row有一个指向单独BLOB页面的指针。但是,在某些条件下,varchar(max)可以将数据存储为常规行,显然它至少应该适合行大小。

因此,如果您的行可能大于8K,则必须使用varchar(max)。如果没有,使用varchar(n)可能会更好,因为从外部页面检索行内数据的速度更快。

MSDN says

  

使用varchar(max)时的大小   列数据条目差异很大,   并且大小可能超过8,000字节。

答案 2 :(得分:1)

VARCHAR优于TEXT的主要优点是您可以在其上运行字符串操作和字符串函数。使用VARCHAR(max),现在你基本上有一个很棒的大(无限制)变量,你可以操纵你想要的...