【发布时间】:2018-10-10 21:15:41
【问题描述】:
我正在更新项目代码,以便在从我们的 C# 应用程序查询数据库时最大限度地重复使用 SQL Server 查询计划。
我们使用 ADO.NET,并且我们正在将所有查询转换为使用 SqlParameters。
当添加一个参数,其值将被设置到 TEXT 类型的表列中,我们正在使用:
[...]
command.Parameters.Add("@MyParamName", SqlDBType.Text, someSize).Value = paramValue;
[...]
如果我们的目标是让这种语句重用查询计划,我应该使用什么大小来代替上面的“someSize”?
是否有一个特殊值可以提供成功让 SQL Server 在每次调用此代码时重新使用查询计划的最佳机会?
更新
根据@Sean-Lange 的评论,Microsoft 正在弃用 NTEXT、TEXT 和 IMAGE……摘自the link 他在下面的 cmets 中提供的内容:
重要! ntext、text 和 image 数据类型将在 SQL Server 的未来版本。避免在 new 中使用这些数据类型 开发工作,并计划修改当前使用的应用程序 他们。请改用 nvarchar(max)、varchar(max) 和 varbinary(max)。
【问题讨论】:
-
你一开始就不应该使用那种类型。 text 数据类型已经被弃用了近 15 年,现在有利于 varchar(max)。 docs.microsoft.com/en-us/sql/t-sql/data-types/…
-
@SeanLange,想把它作为答案,我会接受 - 我的技术负责人刚刚说他通常会在看到任何 Text 列时将它们更改为 varchar(max)。
-
我还建议尽可能指定
varchar(8000)(甚至更低的值)而不是varchar(max)。varchar(max)很多时候都带有性能价格。 -
@ZoharPeled - 这个观点对我来说似乎很奇怪。显然,有时可能会有一些协商的余地和空间,但通常如果我们首先选择
varchar(max),那是因为存在一些操作限制,排除了下限。 (暂时忽略数据“建模者”,他们总是使用最大的可用数据类型来“面向未来”他们的设计) -
@Damien_The_Unbeliever 您忽略的数据“建模者”是我首先发布我之前评论的确切原因:-)。当然,如果您可能需要超过 8000 个字符或 4000 个 Unicode 字符,则必须使用
max。这就是我写“只要有可能”的原因。
标签: c# sql-server ado.net sql-server-2017