nvarchar 字段需要多长时间才能更好地在 SQL Server 中使用文本字段?对于可能会或可能不会查询的文本内容,使用其中一种或另一种的一般指示是什么?
3 回答
据我了解,TEXT
数据类型永远不应该在 SQL 2005+ 中使用。您应该开始使用VARCHAR(MAX)
。
看到这个关于VARCHAR(MAX)
vs.的问题TEXT
。
更新(每条评论):
这个博客很好地解释了这些优势。取自:
但是当尝试查询它时,使用类型文本的痛苦就来了。例如,无法按文本类型分组。
使用文本类型的另一个缺点是增加了磁盘 IO,因为现在每条记录都指向一个 blob(或文件)。
因此,基本上,VARCHAR(MAX)
将数据与记录一起保存,并让您能够像对待其他VARCHAR
类型一样对待它,例如使用GROUP BY
和字符串函数(LEN
、CHARINDEX
等)。
对于TEXT
,您几乎总是必须将其转换VARCHAR
为使用针对它的函数。
但是回到你关于效率的问题的根源,我认为使用TEXT
与VARCHAR(MAX)
. 查看此 MSDN 文章(搜索“数据类型”)TEXT
已弃用,应替换为 VARCHAR(MAX)。
首先,根本不要使用文本。MSDN 说:
在 Microsoft SQL Server 的未来版本中,将删除 ntext、text 和 image 数据类型。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。请改用 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) 可能会更可取,因为它比从外部页面检索行内数据更快。
当列数据条目的大小变化很大并且大小可能超过 8,000 字节时,请使用 varchar(max)。
VARCHAR 优于 TEXT 的主要优点是您可以在其上运行字符串操作和字符串函数。使用 VARCHAR(max),现在您基本上有了一个很棒的大(不受限制)变量,您可以按照自己的意愿进行操作。