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

发布于 2024-11-06 20:04:08 字数 81 浏览 4 评论 0原文

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

How long does an nvarchar field need to be before it is better to use a text field in SQL Server? What are the general indications for using one or the other for textual content that may or may not be queried?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

泛泛之交 2024-11-13 20:04:08

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

请参阅有关 VARCHAR(MAX)< 的此问题 /code> 与 TEXT

更新(根据评论):

这个博客很好地解释了这些优点。摘自:

但是当尝试查询类型文本时,使用类型文本的痛苦就会出现。例如,不可能按文本类型进行分组。

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

因此,基本上,VARCHAR(MAX) 将数据与记录一起保存,并让您能够像其他 VARCHAR 类型一样对待它,例如使用 GROUP BY 和字符串函数(LENCHARINDEX 等)。

对于 TEXT,您几乎总是必须将其转换为 VARCHAR 才能对其使用函数。

但回到关于效率的问题的根源,我认为使用 TEXTVARCHAR(MAX) 并不比使用 TEXT 更有效。查看这篇 MSDN 文章(搜索“数据类型”), TEXT 已弃用,应替换为 VARCHAR(MAX)。

From what I understand, the TEXT datatype should never be used in SQL 2005+. You should start using VARCHAR(MAX) instead.

See this question about VARCHAR(MAX) vs. TEXT.

UPDATE (per comment):

This blog does a good job at explaining the advantages. Taken from it:

But the pain from using the type text comes in when trying to query against it. For example grouping by a text type is not possible.

Another downside to using text types is increased disk IO due to the fact each record now points to a blob (or file).

So basically, VARCHAR(MAX) keeps the data with the record, and gives you the ability to treat it like other VARCHAR types, like using GROUP BY and string functions (LEN, CHARINDEX, etc.).

For TEXT, you almost always have to convert it to VARCHAR to use functions against it.

But back to the root of your question regarding efficiency, I don't think it's ever more efficient to use TEXT vs. VARCHAR(MAX). Looking at this MSDN article (search for "data types"), TEXT is deprecated, and should be replaced with VARCHAR(MAX).

无畏 2024-11-13 20:04:08

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

ntext、文本和图像数据类型将
将在未来版本中删除
微软SQL服务器。避免使用
这些数据类型在新开发中
工作,并计划修改应用程序
目前正在使用它们。使用
nvarchar(最大值)、varchar(最大值)和
varbinary(max) 代替。

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

如果比较 varchar(n) 与 varchar(max),从技术上讲,它们是两种不同的数据类型(存储方式不同):

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

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

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

MSDN 说

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

First of all don't use text at all. MSDN says:

ntext, text, and image data types will
be removed in a future version of
Microsoft SQL Server. Avoid using
these data types in new development
work, and plan to modify applications
that currently use them. Use
nvarchar(max), varchar(max), and
varbinary(max) instead.

varchar(max) is what you might need.

If you compare varchar(n) vs varchar(max), these are technically two different datatypes (stored differently):

  • varchar(n) value is always stored inside of the row. Which means it cannot be greater than max row size, and row cannot be greater than page size, which is 8K.

  • varchar(max) is stored outsize the row. Row has a pointer to a separate BLOB page. However, under certain condition varchar(max) can store data as a regular row, obviously it should at least fit to the row size.

So if your row is potentially greater than 8K, you have to use varchar(max). If not, using varchar(n) will likely be preferable as it is faster to retrieve in-row data vs from outside page.

MSDN says:

Use varchar(max) when the sizes of the
column data entries vary considerably,
and the size might exceed 8,000 bytes.

指尖凝香 2024-11-13 20:04:08

VARCHAR 相对于 TEXT 的主要优点是您可以在其上运行字符串操作和字符串函数。有了 VARCHAR(max),现在你基本上有了一个很棒的大(无限制)变量,你可以按照你想要的方式操作它。

The main advantage of VARCHAR over TEXT is that you can run string manipulations and string functions on it. With VARCHAR(max), now you basically have an awesome large (unrestricted) variable that you can manipulate how you want..

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文