2011-10-26 7 views
3

ヒントをクエリに適用しようとしていますが、Explainプランは使用されているヒントに変更されません。あなたは私はハッシュをネストされたループの代わりに結合を使用してクラスタを強制しています見ることができるように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には2つのテーブル名が必要です。あなた自身がクエリをヒントする必要が見つけるのであれば、あなたは、もちろん

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 

ようなものが必要だろう、それは一般的に、あなたの統計が不正確であることを意味します。一般的には、統計の問題点を修正して、オプティマイザがより効率的な計画を独自に選択する方がよい場合があります。

関連する問題