nvarchar(max)-如何加快在SQL中只获取有意义字符串的速度

nvarchar(max)-如何加快在SQL中只获取有意义字符串的速度,sql,sql-server,ssis,etl,Sql,Sql Server,Ssis,Etl,我有一个表,它的列带有Nvarchar(Max)。该列90%的时间具有255到500之间的字符串长度。有些甚至超过了22000个,这些都不是企业用于报告目的的XML所必需的。总之,长话短说是消除所有多余体积的最好办法。我已经试过了 left(column,500) 及 我已将目标列的长度设置为500。 但是,仅因为该列的存在,将表从源加载到目标需要一段时间。我正在源代码中执行SSI。我还转到了输出列,忽略了截断。无论如何,我都可以减少加载此专栏所需的时间。这些方法似乎需要加载整个长度。任何建议

我有一个表,它的列带有
Nvarchar(Max)
。该列90%的时间具有255到500之间的字符串长度。有些甚至超过了22000个,这些都不是企业用于报告目的的XML所必需的。总之,长话短说是消除所有多余体积的最好办法。我已经试过了

left(column,500)

我已将目标列的长度设置为500。 但是,仅因为该列的存在,将表从源加载到目标需要一段时间。我正在源代码中执行SSI。我还转到了输出列,忽略了截断。无论如何,我都可以减少加载此专栏所需的时间。这些方法似乎需要加载整个长度。任何建议都将不胜感激。

NVARCHAR(MAX)
(即使使用像
子字符串
LEFT
这样的函数)将消耗大量内存,并将很快填满缓冲区。检查
DefaultBufferMaxSize
以及属性
BLOBTempStoragePath
BufferTempStoragePath
将它们设置为最佳值可能会提高性能,但请注意,您已经对它们进行了相应的配置,因为这就像一把双刃剑

此外,如果源和目标位于不同的服务器上,则网络也可能是一个问题,因为所有数据都必须通过网络从SQL server传输到SSIS服务器。你可以试着换一下房间

这些链接提供了更多信息


也许您应该制作一个表,当该列的长度超过一定长度时,该表只包含该列的实例。然后只存储一个外键,可能还有一个位来表示数据是存储在新的LongStrings表中还是存储在原始列中。这是一种非常丑陋的方法,但您不需要每次查询主表时都引入所有垃圾。您还可以执行某种全文索引,以更快地搜索该数据。您想实际截断字段,还是只查找字段在200-500个字符范围内的记录?理想情况下,保留字段内容,但将其限制为最多500个字符。假设较长的是XML,那么它们就不需要了,因为它们可能非常庞大。PS这个表记录了所有类型的活动,它是一个crm系统,只是在内容上略有不同,有些是有意义的,有些不是。更大的字符串长度的是XML,我想正如业务分析师所提到的,它们不是也可以被排除在外
substring(column,1,500)