加载text或ntext SQL Server列的最快方法是什么?

时间:2009-07-22 21:06:57

标签: asp.net sql-server performance

我这样做尽可能简单,但有时查询需要3秒以上。我正在使用这样的基本参数化查询:

SELECT TextStuff FROM MyInfo WITH (NOLOCK) WHERE MyInfoID=@MyInfoID

有更快的方法吗?如果我将ntext列转换为nvarchar(MAX)列,会提高性能吗?

3 个答案:

答案 0 :(得分:2)

我会反对一些政治风,并说...

如果您不需要16位Unicode功能,请使用 varchar(MAX)而不是 ntext 。使用varchar(MAX)而不是nvarchar(MAX)会将文本字段的存储和传输时间减半。

如果您严重受网络IO约束(例如:您的“文本字段”在兆字节范围内),您可以考虑使用数据压缩:将文本的压缩版本存储在varbinary(MAX)字段中,而不是文本。因此,通过网络的结果的混洗全部被压缩。在.NET中压缩/解压缩文本相对简单,CPU周期通常很便宜。

(SQL Server 2008的新“压缩”功能在这里确实无济于事......线路上的流量将是相同的。)

答案 1 :(得分:1)

是的,由于描述和分析数据的存储方式不同,您可能会因nvarchar max而获得性能提升here

转移到NVARCHAR MAX的另一个优点是比ntext具有更大的灵活性,而且ntext被弃用而不支持NVARCHAR MAX

与合适的指数相比,绩效的可能改善应该是最小的

修改 在谈论执行时间的差异时,这可能是由于高速缓存的执行计划重用/数据被缓存。如果您要尝试通过更改索引或更改数据类型来优化此操作,请确保公平地比较性能以确保不会产生偏差结果。 您可以通过清除执行计划缓存和数据缓存来执行此操作,但不建议在生产服务器上执行此操作:

DBCC DROPCLEANBUFFERS -- Clear data from cache
DBCC FREEPROCCACHE -- Clear plan cache

答案 2 :(得分:0)

您是否对查询进行了分析或分析,以确保文本/ ntext检索是问题?例如,可能是导致表扫描的错误索引。