缓慢的SQL Server CLR聚合

| 我总是发现缺少一个内置的聚合函数,该函数只是使用某些用户定义的分隔符将值串在一起,这令人沮丧。 我知道的最接近的东西是XML hack:
select s.string as [text()] 
from strings s 
for xml path(\'\')
但是我认为这是一种非常奇怪的方式,您仍然必须使用尾随的或领先的分隔符来处理该案件。所以,我以为我会写一个CLR聚合:
select dbo.Fold(s.string, \', \') 
from strings s
很好。除了当行数达到5000时,这件事不能很好地执行。我真的不希望对那么多的数据运行它,但是令我惊讶的是,随着数据集的增长,聚合的性能下降得很快。起初我不明白为什么,然后我意识到问题在于SQL Server中处理UDF的方式。 我正在使用带有
StringBuilder
类的UDF,因此我必须实现
IBinarySerialize
。但是由于种种原因,我不理解SQL Server在每次
Accumulate
迭代之间都调用Write / Read对。显然,当字符串变大时,这会导致性能问题。无论如何,要避免这种昂贵的序列化? 仅供参考,XML hack快几个数量级。     
已邀请:
        您正在执行的是MySQL GROUP_CONCAT 看到这些灵感... 关于在Microsoft SQL Server 2005中模拟group_concat MySQL函数的答案? \“ GROUP_CONCAT SQL Server的字符串聚合\”在Codeplex上 我个人使用XML技巧。     

要回复问题请先登录注册