gpt4 book ai didi

sql-server - 慢速 SQL Server CLR 聚合

转载 作者:行者123 更新时间:2023-12-02 04:08:34 25 4
gpt4 key购买 nike

我总是发现缺少一个内置的聚合函数,它只是使用一些用户定义的分隔符将值串在一起,令人沮丧。

我所知道的最接近的是 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 的每次迭代之间调用了写入/读取对。 .显然,当字符串变大时,这会产生性能问题。有没有办法避免这种昂贵的序列化?

仅供引用,XML hack 的速度要快几个数量级。

最佳答案

你正在做的是实现 MySQL GROUP_CONCAT

看看这些以获得灵感......

  • 关于 Simulating group_concat MySQL function in Microsoft SQL Server 2005? 的答案
  • "GROUP_CONCAT string aggregate for SQL Server" on codeplex

  • 就个人而言,我使用 XML 技巧。

    关于sql-server - 慢速 SQL Server CLR 聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6328349/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com