使用LINQ加速查询

4
我正在将大约350行(带有一些数据收集)从MS SQL Server转移到iSeries进行处理。我感觉这个过程太慢了,大约需要一分钟左右的时间。我正在使用LINQ2SQL完成所有的MS SQL操作。以下是我目前正在做的基本步骤:
  1. 收集所有车辆主数据以逐个处理。
  2. 按车辆汇总燃料使用情况
  3. 按车辆汇总油耗量
  4. 按车辆汇总零件使用情况
  5. 按车辆汇总劳务费用
  6. 按车辆汇总外部维修费用
  7. 按车辆汇总事故成本
我知道这是很多查询,但大多数都来自于MS SQL Server中的不同表格。所有这些都需要至少一个连接。我考虑将Oil和Parts合并为一个查询,将Outside Repairs和Accident Costs合并为一个查询,因为它们都存储在相同的表格中,看看是否能提高性能。
你有其他建议吗?
请注意,这是一个供应商提供的产品,我希望不要创建任何未在数据库中的存储过程或视图(基本上没有)。

更新: 我写了另一篇文章,探讨改善速度的替代方案。


2
350行数据并不算是很大的数据量。你是否运行了SQL跟踪以查看TSQL正在执行什么?可能是N+1或类似的问题吗? - Marc Gravell
3个回答

5

或许您可以将这些查询启动到单独的线程中并等待它们返回?然后,所有的计算都会在大约与现在所需时间的一半相同的时间内完成,我想是这样。

按表对结果进行分组,在我看来是个好主意,因为您已经在处理这些数据了。

按表对查询进行分组并将它们启动到不同的线程中,肯定会提高性能。这完全取决于您的情况是否最优。


抱歉,在这种情况下它没有起作用。请查看我的答案以了解我的发现。对于一个好的指向我未曾想到的方向的答案,点赞加一。 - Mike Wills

0

看起来数据库设计得很糟糕。无论LINQ在后台生成了什么,它都是高度低效的代码。我并不是说LINQ不好,只是对于这个数据库来说不好。我转换成一个快速拼凑的.XSD设置,处理时间从1.25分钟降至15秒。一旦我进行适当的重新设计,我只能猜测我会再节省几秒钟。我会在另一天尝试在更好的数据库上使用LINQ。


那个,我不知道,因为你的问题中没有展示任何关系型数据库图表。非常感谢你让我知道这一点,我非常感激。如果我遇到另一个类似的问题,我会考虑你的情况,并在另一个答案中提出建议,甚至用于我的项目。谢谢Mike!祝你有愉快的一天!=) - Will Marcouiller

0
如果性能很重要(一分钟是个问题吗?),您可以考虑使用摘要表。然后,您只需查询摘要表以获取报告。摘要表可以使用触发器或每晚批量提取到摘要表中来构建。

我不知道你来自哪个世界,但我来自iSeries世界,在那里,如果你眨眼,你可能会错过这个程序的运行。它不到400行,几乎没有什么需要处理的。即使是数十万行,我也不会有任何问题。此外,我现在已经将其缩短到5秒钟。你更喜欢哪一个? - Mike Wills

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接