gpt4 book ai didi

c# - 如何分解/运行大型 SQL 查询?

转载 作者:行者123 更新时间:2023-11-30 12:36:27 24 4
gpt4 key购买 nike

我有一个包含大量行(约 2 亿行)的表,我想在从内存中读取这些值后在 C# 中处理这些值。处理需要以一种无法在 sql server 内部完成的方式按列值对条目进行分组。问题是一次读取整个数据会给我一个 OutOfMemory 异常,并且即使部分执行也要花费大量时间。

所以我想将我的查询分成更短的部分。一种方法显然是进行独立选择,然后使用 where in 子句。我被建议的另一种方法是使用 sql 游标。我想选择其中一种方法(如果可能,也可以选择另一种方法),尤其是关于以下几点:

  1. 这些方案对服务器的性能有何影响?哪个执行得更快?
  2. 我可以安全地并行化 sql 游标查询吗?如果我将第一个方案(带有 where in 子句的方案)并行化,我会获得性能优势吗?
  3. 我可以在 where in 子句中指定多少个对象?是否仅受查询字符串大小的限制?

也欢迎任何其他建议。

Edit1:我得到了不同的解决方案,但我仍然想知道我最初问题的答案(出于好奇)。

最佳答案

如果非要在代码中做分组逻辑,可以尝试把逻辑写成sql server中的托管存储过程,用于摸索查询。

checkout

这将允许您在将数据集返回给客户端之前在服务器上进行分组。

[编辑 - 关于您对使用词典的评论]

您可以在 Codeplex 上查看我的项目有一个磁盘持久化 Dictionary<T,V> .这将防止内存不足异常。看看它如何为您的场景执行会很有趣。 (如果您使用的是 32 位系统,请阅读介绍页面上的说明)。

关于c# - 如何分解/运行大型 SQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3279465/

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