在 SQL Server 中,什么时候使用文本字段比使用 nvarchar 字段更有效?
在 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
据我了解,
TEXT
数据类型不应该在 SQL 2005+ 中使用。您应该开始使用VARCHAR(MAX)
。请参阅有关
VARCHAR(MAX)< 的此问题 /code> 与
TEXT
。更新(根据评论):
这个博客很好地解释了这些优点。摘自:
因此,基本上,
VARCHAR(MAX)
将数据与记录一起保存,并让您能够像其他VARCHAR
类型一样对待它,例如使用GROUP BY 和字符串函数(
LEN
、CHARINDEX
等)。对于
TEXT
,您几乎总是必须将其转换为VARCHAR
才能对其使用函数。但回到关于效率的问题的根源,我认为使用
TEXT
与VARCHAR(MAX)
并不比使用TEXT
更有效。查看这篇 MSDN 文章(搜索“数据类型”),TEXT
已弃用,应替换为 VARCHAR(MAX)。From what I understand, the
TEXT
datatype should never be used in SQL 2005+. You should start usingVARCHAR(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:
So basically,
VARCHAR(MAX)
keeps the data with the record, and gives you the ability to treat it like otherVARCHAR
types, like usingGROUP BY
and string functions (LEN
,CHARINDEX
, etc.).For
TEXT
, you almost always have to convert it toVARCHAR
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).首先,根本不要使用文本。 MSDN 说:
varchar(max) 是您可能需要的。
如果比较 varchar(n) 与 varchar(max),从技术上讲,它们是两种不同的数据类型(存储方式不同):
varchar(n) 值始终存储在行内部。这意味着它不能大于最大行大小,并且行不能大于页面大小,即 8K。
varchar(max) 存储的大小超出了行的大小。 Row 有一个指向单独的 BLOB 页的指针。但是,在某些条件下,varchar(max) 可以将数据存储为常规行,显然它至少应该适合行大小。
因此,如果您的行可能大于 8K,则必须使用 varchar(max)。如果没有,使用 varchar(n) 可能会更好,因为与从外部页面检索行内数据相比,它更快。
MSDN 说:
First of all don't use text at all. MSDN says:
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:
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..