2011-10-26 38 views
3

我想將提示應用於我的查詢,但解釋計劃不會更改爲正在使用的提示。在oracle中使用提示

我的查詢

select/*+ USE_HASH(master_flight)*/ bid, b.fno, seat, flight_date from 
master_booking b, master_flight f where b.fno = f.fno and rownum < 
120000 

解釋計劃

119999 COUNT STOPKEY (cr=11336 pr=446 pw=0 time=240292 us) 
119999 NESTED LOOPS (cr=11336 pr=446 pw=0 time=120236 us) 
800 TABLE ACCESS FULL ASS2MASTER_FLIGHT (cr=936 pr=441 pw=0 time=22455 us) 
119999 TABLE ACCESS CLUSTER ASS2MASTER_BOOKING (cr=10400 pr=5 pw=0 time=6858 us) 
800 INDEX UNIQUE SCAN FNO_INDEX (cr=1600 pr=5 pw=0 time=4717 us)(object id 332468) 

,你能看到我的強迫羣集使用散列連接代替嵌套循環。但解釋計劃仍然表明它使用嵌套循環。

回答

7

通常,如果您使用的是提示,則需要引用別名,而不是表名。而USE_HASH需要兩個表名。所以,你會需要像

SELECT /*+ use_hash(b f) */ 
     bid, b.fno, seat, flight_date 
    FROM master_booking b, 
     master_flight f 
WHERE b.fno = f.fno 
    AND rownum < 120000 

當然,如果你發現自己需要提示的查詢時,通常意味着你的統計數據是不正確的。而且,通常情況下,您最好能解決統計數據中出現的任何問題,以便優化器自行選擇更高效的計劃。

相關問題