使用LINQ加速查询

我将大约350行(带有一些数据收集)从MS SQL Server传输到iSeries进行处理。 我觉得这个过程太慢了,差不多一分钟左右。 我在做LINQ2SQL中的所有MS SQL。 以下是我目前正在做的基础知识:

  1. 收集所有车辆主数据以一次一个地处理。
  2. SUM()车辆的燃料使用量
  3. SUM()车辆用油量
  4. SUM()车辆使用的零件
  5. SUM()按车辆加工
  6. SUM()车外维修
  7. SUM()车辆事故成本

我意识到这是很多查询,但大多数都是来自MS SQL Server中的不同表。 所有这些都需要至少一次加入。 我正在考虑将一个查询和外部维修和事故成本中的油和零件加入到一个查询中,因为这两个查询都存储在同一个表中,看看是否能提高性能。

你有什么其他的建议?

请注意,这是供应商提供的产品,我宁愿不创建任何尚未存在于数据库中的存储过程或视图(基本上没有)。

更新:我有另一篇文章,研究提高速度的替代方案。

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

在我看来,将每个表的结果分组是一个好主意,因为您已经在处理这些数据。

将每个表的查询分组并将它们启动到不同的线程中肯定会获得性能。 这一切都取决于这是否适合您的情况。

看起来数据库的设计很差。 无论LINQ在后台生成什么,它都是非常低效的代码。 我不是说LINQ不好,这对这个数据库来说不好。 我转换为快速抛出.XSD设置,处理时间从1.25分钟到15秒。 一旦我进行了适当的重新设计,我只能猜测我会再缩短几秒钟。 我会在更好的数据库上再次尝试LINQ。

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