2016-11-07 39 views
0

EDIT2:改寫整個問題,以便更清楚集團通過引起查詢執行時間的大幅增加

我有相當長的使用條款,產生400行和10列的子查詢表在相當大的一張桌子的第二個下面。

但是我希望通過該子查詢創建一個組,然後問題出現 - 當我執行該組並在with子句中進一步使用它時,查詢運行15分鐘並且仍然沒有結果,所以我終止了它。

如果我只能通過使用組和停止腳本存在,那麼它運行第二下,使用此腳本:

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 

portfolio是with子句

但是前面部分,如果我再次用它作爲子查詢,例如:

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

有什麼辦法來支配優化器選擇相同的路徑在較快的例子嗎?

+2

至少需要發佈兩者的查詢計劃。很難猜測優化器可能做了什麼,然後猜測它爲什麼會做我們正在猜測的事情。 –

+0

請添加原始查詢的執行計劃。 –

+0

@JustinCave我已經添加了計劃imgur專輯 –

回答

0

沒有看到表結構和執行計劃,我可以提供兩件事情:

1)添加適當的指標,如果他們不這樣做還不存在。

2)用該WITH子句創建一個臨時表,然後在表上使用相同的select。

+0

增加了關於該問題的其他信息 –

+0

2巨大的'不。這是Oracle否MySql和索引是什麼在第一個地方殺死他的查詢性能 –

+0

因此,這個詞「適當」。正確的索引只能加速查詢,而不會傷害它。@dudumarkovitz – sagi