2012-05-03 189 views
1

我使用下面的查询,SQL优化查询

SELECT qTermine.REISENR, 
     qTermine.REISEVON, 
     qTermine.REISEBIS, 
     MIN(qPreise.PREIS) AS PREIS 
FROM qTermine, 
     qPreise 
WHERE qPreise.REISENR = qTermine.REISENR 
     AND qPreise.PROVKLASSE = 1 
     AND qPreise.VERFUEGBAR <> 0 
GROUP BY qTermine.REISENR, 
      qTermine.REISEVON, 
      qTermine.REISEBIS 

我只希望选择那些行,其中的价格是最小的。

可以,或者我们可以优化它吗?

+0

有指数可以有更好的表现,我认为这是不够好 – Nick

+0

我希望你不要用这个来决定去哪里度假。严重的是,它看起来没问题。你也可以把它写成一个非聚合的子查询。你将不得不测试看哪个更快。也许看看有关数据的计划。 – joshp

+0

我认为从优化的角度来看是可以的。但我不明白你为什么使用'AS PREIS'部分。正如我所看到的,您从不在代码中使用该名称。 –

回答

2

该查询本身很好,因为它是。很难回答这个问题,至于大多数用途,你写的是好的。您目前是否遇到性能问题,或者此查询是否执行了极其长时间?或者你是否谨慎并想避免引入大瓶颈?如果是后者,我认为你不需要担心;再次,在大多数用途,这很好。

确保您在REISENR上的索引都在REISENR上,并且在qPreise.PREIS上。至于PROVKLASSEVERFUEGBAR我有一种感觉,如果您要添加索引(您可以在执行计划中检查这些索引),那么它们的索引实际上不会是唯一的,但是如果没有亲密地了解您的索引,就很难分辨出来数据。

0

您查询是很好的,如果你的“qPreise.PREIS”