2014-07-25 63 views
0

我有一個查詢從開發人員發送給我,並試圖執行它時,我遇到了一些神祕的問題(至少對我來說)。Oracle查詢與SELECT *運行良好,但與SELECT column1,column2掛起'

SELECT h.toot_id, trunc(sysdate) 
FROM test.car_ehk h 
WHERE toot_id in 
(SELECT t.toot_id 
    FROM test.car_ehk e, 
     test.car t 
    WHERE e.toot_id=t.toot_id 
    and t.toot_type_id < 8 
    and e.toot_ehk_id= 
    (SELECT max(toot_ehk_id) 
     FROM test.car_ehk 
     WHERE toot_id = e.toot_id) 
     and e.sent_lop_aeg is null 
     and t.alg_aeg <> e.sent_alg_aeg 
     and e.ehk_reply ='OK' 
    ) 
    and toot_ehk_id = 
    (SELECT MAX(t2.TOOT_EHK_ID) 
     FROM test.car_EHK t2 
     WHERE TOOT_ID=H.TOOT_ID); 

不起作用。查詢只是繼續運行,DBA不得不殺死它。

當我用select h.*代替select h.toot_id, trunc(sysdate)它的作品。

怎麼回事?

+0

是car_ehk或car largeable表,獲取大量的數據添加或刪除? (我在質疑表的統計數據是否關閉,這在某些情況下可能會導致執行計劃錯誤,並且在其他情況下可以正常工作)我也在努力解決這個問題,好像應該有更好的方法寫這個的方法。你能用普通英語解釋這個應該做什麼嗎? (樣本數據w /預期結果會很好) – xQbert

+0

當你刪除'trunc(sysdate)'而只保留'h.toot_id'時會發生什麼? –

+0

如果我只留下h.toot_id,則沒有任何變化。 表格並不那麼大,count(*)給出了大約200k個結果。表格包含汽車的多個條目版本,並且(選擇MAX(t2.toot_ehk_id)...東西試圖獲得最新版本。 – user3876898

回答

-2

對我來說聽起來像一個Oracle錯誤。也許看看兩個陳述的「解釋計劃」。驗證一個計劃中使用的所有索引,而不是另一個。

+3

這比作爲回答更適合作爲評論。 –