2016-11-07 9 views
0

EDIT2:それがより明確になるようグループ

私はかなり長い400行10列のサブクエリテーブルが生成する句、と持っている全体の質問を言い換え非常に大きなテーブルから1秒未満で。

しかし私はそのサブクエリと問題が発生したグループを作成したいと思います。私がそのグループを行い、さらにwith節でそれを使用すると、クエリは15分間実行されます私はそれを終了した。

私だけでグループを使用し、そこにスクリプトを停止した場合、それは、このスクリプトを使って、第二の下で実行されます:

portfolioしかし句と

の前の部分である

select ROK,d.typ,LIM_DGR_KOEF, LIM_HODNOTA, LIMIT_OD, LIMIT_DO,lek_uvazky, 
sum(d.dok_sk_vyp) suma_fakt, 
sum(d.dok_sk_vyp-d.dok_sk_uzn) neuzn_vyk, 
sum(d.dok_sk_uzn) suma_uzn, 
sum(d.dok_sk_uct) suma_uct, 
count(*) as pocet_vyk 
from portfolio d 
group by ROK,d.typ,LIM_DGR_KOEF, LIM_HODNOTA, LIMIT_OD, LIMIT_DO,lek_uvazky 

たとえば、サブクエリとして再度使用すると、次のようになります。

pf as(
select ROK,d.typ,LIM_DGR_KOEF, LIM_HODNOTA, LIMIT_OD, LIMIT_DO,lek_uvazky, 
sum(d.dok_sk_vyp) suma_fakt, 
sum(d.dok_sk_vyp-d.dok_sk_uzn) neuzn_vyk, 
sum(d.dok_sk_uzn) suma_uzn, 
sum(d.dok_sk_uct) suma_uct, 
count(*) as pocet_vyk 
from portfolio d 
group by ROK,d.typ,LIM_DGR_KOEF, LIM_HODNOTA, LIMIT_OD, LIMIT_DO,lek_uvazky 
)select * from pf 

次に、説明プランが変更され、非常に重いです。ここで

は計画を説明しています http://imgur.com/a/nJpT8

は速いの例のように同じパスを選択するオプティマイザを指示する方法はありますか?彼らはまだ存在しない場合は、適切なインデックスを追加)

1:テーブル構造と実行計画を見ずに

+2

少なくとも、両方のクエリプランを投稿する必要があります。オプティマイザが何をしているのかを推測し、推測していることを推測して推測しているのかもしれません。 –

+0

元のクエリの実行計画を追加してください。 –

+0

@JustinCave私はアルバムをimgurする計画を追加しました –

答えて

0

、私は2つのことを提供することができます。

2)そのWITH句を使用してテンポラリテーブルを作成し、テーブルで同じ選択を使用します。

+0

質問に追加の情報を追加 –

+0

2 HUGE 'いいえ。これはOracleのMySqlで、索引はクエリのパフォーマンスを最初に殺すものです –

+0

したがって、「適切な」という語です。正しいインデックスはクエリをスピードアップするだけで、傷つけることはありません。@dudumarkovitz – sagi