2010-03-09 107 views
4

我从MS SQL Server向iSeries传输大约350行(包含一些数据收集)进行处理。我觉得这个过程太慢了,大约一分钟左右。我正在做LINQ2SQL中的所有MS SQL的东西。这里是我目前正在做的事情的基本知识:使用LINQ加快查询速度

  1. 收集所有车辆主数据以一次处理一次。
  2. SUM()燃料使用由车辆由车辆
  3. SUM()油使用情况由车辆
  4. SUM()由车辆使用
  5. SUM()劳动由车辆
  6. SUM零件()外部维修通过车辆

  • SUM()事故成本我意识到这是一个很大的查询,但其中大部分都是从MS SQL Server中的不同的表。所有这些都需要至少一次加入。我正在考虑将石油和零部件加入到一个查询中,并将外部修理和事故费用合并到一个查询中,因为这两个查询都存储在同一个表中,并查看是否可以提高性能。

    您有任何其他建议吗?

    注意,这是一个供应商交付的产品和我宁愿没有创建任何存储过程或视图(这基本上是无)是不是已经在数据库中。

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

  • +2

    350行几乎不是数据的征税量。您是否运行SQL跟踪以查看TSQL执行的是什么?可能是N + 1或类似的? – 2010-03-09 16:31:58

    回答

    0

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

    +0

    那,我不知道,因为你的问题没有说明关系数据库图。谢谢,尽管让我知道,非常感谢。我是否应该面对另一个类似的问题,我会考虑你的情况,并在另一个答案中或甚至为我自己的项目提出建议。谢谢迈克!祝你今天愉快! =) – 2010-03-12 15:36:04

    5

    也许你可以启动这些查询到分离的线程,等待他们回来?然后,所有的计算都可以在大约相同的时间完成,比方说,现在我需要一半的时间。

    分组每桌你的结果是在我看来是一个好主意点作为你已经在处理这些数据。每桌

    分组查询中,并将它们发射到不同的线程将在性能肯定增益。这一切都取决于这是否适合您的情况。

    +0

    对不起,这在这种情况下不起作用。查看我的答案以获得我的发现。 +1为一个好的答案指向了我没有想到的方向。 – 2010-03-11 16:48:47

    0

    如果性能是重要的(1分是一个问题吗?),你可能会考虑使用的汇总表。然后,您只需查询汇总表以获取报告。摘要表可以使用触发器进行构建,也可以每晚对摘要表进行批量提取。

    +0

    我不知道你来自哪个世界,但是我来自iSeries世界,如果你眨眼睛,那么即使运行,你也会错过这个程序。它在400行以下,这几乎不需要处理。如果数十万行,我就不会有任何问题。此外,我现在已经将其降低到5秒。你更喜欢哪个?? – 2010-03-16 13:30:03