使用LINQ加速查询

时间:2010-03-09 16:06:56

标签: c# linq-to-sql performance ibm-midrange

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

  1. 收集所有车辆主数据,以便一次处理一次。
  2. SUM()车辆燃料使用
  3. SUM()车辆用油
  4. SUM()车辆使用的零件
  5. SUM()按车辆分类
  6. SUM()车外维修
  7. SUM()车辆意外成本
  8. 我意识到这是很多查询,但大多数是来自MS SQL Server中的不同表。所有这些都需要至少一次加入。我正在考虑将一个查询和外部维修和事故成本中的油和零件加入到一个查询中,因为这两个查询都存储在同一个表中,看看是否能提高性能。

    你还有其他建议吗?

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

    更新:another post正在寻找提高速度的替代方案。

3 个答案:

答案 0 :(得分:5)

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

在我的观点中对每个表的结果进行分组是一个好主意,因为您已经在处理这些数据。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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