1. /*+ALL_ROWS*/
これは、ステートメント ブロックに対してコストベースの最適化方法が選択され、リソース消費を最小限に抑えるために最高のスループットが得られることを示しています。
例えば:
SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT';
2. /*+FIRST_ROWS*/
これは、ステートメント ブロックに対してコストベースの最適化方法が選択され、リソース消費を最小限に抑えるために最適な応答時間が得られることを示しています。
例えば:
SELECT /*+FIRST_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT';
3. /*+選択*/
データ ディクショナリにアクセス テーブルに関する統計情報がある場合、最適化方法はコストに基づいて行われ、データ ディクショナリにアクセス テーブルに関する統計情報がない場合、最適なスループットが得られることを示します。最適化方法はルールのコストに基づきます。
例えば:
SELECT /*+CHOOSE*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMMPMS WHERE EMP_NO='SCOTT';
4. /*+ルール*/
ステートメント ブロックのルールベースの最適化方法の選択を示します。
例えば:
SELECT /*+ RULE */ EMP_NO,EMP_NAM,DAT_IN FROM BSEMMPMS WHERE EMP_NO='SCOTT';
5. /*+FULL(TABLE)*/
テーブルのグローバル スキャンを選択する方法を示します。
例えば:
SELECT /*+FULL(A)*/ EMP_NO,EMP_NAM FROM BSEMPMS A WHERE EMP_NO='SCOTT';
6. /*+ROWID(TABLE)*/
プロンプトは、指定されたテーブルが ROWID に基づいてアクセスされることを明確に示します。
例えば:
SELECT /*+ROWID(BSEMMPMS)*/ * FROM BSEMMPMS WHERE ROWID>='AAAAAAAAAAAAAAA'
AND EMP_NO='スコット';
7. /*+クラスター(テーブル)*/
プロンプトは、指定されたテーブルに対してクラスター スキャンのアクセス方法が選択されていることを明確に示しており、これはクラスター オブジェクトに対してのみ有効です。
例えば:
SELECT /*+CLUSTER */ BSEMPMS.EMP_NO,DPT_NO FROM BSEMPMS,BSDPTMS
WHERE DPT_NO='TEC304' および BSEMMPMS.DPT_NO=BSDPTMS.DPT_NO;
8. /*+INDEX(テーブルインデックス名)*/
表選択インデックスのスキャン方法を示します。
例えば:
SELECT /*+INDEX(BSEMPMS SEX_INDEX) 男性の BSEMPMS が少ないため、SEX_INDEX を使用してください */ FROM BSEMPMS WHERE SEX='M';
9. /*+INDEX_ASC(TABLE INDEX_NAME)*/
テーブル上のインデックスを昇順に選択するスキャン方法を示します。
例えば:
SELECT /*+INDEX_ASC(BSEMMPMS PK_BSEMMPMS) */ FROM BSEMMPMS WHERE DPT_NO='SCOTT';
10. /*+INDEX_COMBINE*/
指定したテーブルのビットマップ アクセス パスを選択します。INDEX_COMBINE のパラメータとしてインデックスが指定されていない場合は、ビットマップ インデックスのブール値の組み合わせが選択されます。
例えば:
SELECT /*+INDEX_COMBINE(BSEMPMS SAL_BMI HIREDATE_BMI)*/ * BSEMPMS から
WHERE SAL<5000000 および HIREDATE
11. /*+INDEX_JOIN(TABLE INDEX_NAME)*/
プロンプトは、インデックスをアクセス パスとして使用するようにオプティマイザに明示的に指示します。
例えば:
SELECT /*+INDEX_JOIN(BSEMPMS SAL_HMI HIREDATE_BMI)*/ SAL,HIREDATE
FROM BSEMMPMS WHERE SAL<60000;
12. /*+INDEX_DESC(テーブルインデックス名)*/
テーブル上のインデックスを降順に選択するスキャン方法を示します。
例えば:
SELECT /*+INDEX_DESC(BSEMMPMS PK_BSEMMPMS) */ FROM BSEMMPMS WHERE DPT_NO='SCOTT';
13. /*+INDEX_FFS(テーブルインデックス名)*/
全テーブル スキャンの代わりに、指定したテーブルに対して高速全インデックス スキャンを実行します。
例えば:
SELECT /*+INDEX_FFS(BSEMPMS IN_EMPNAM)*/ * FROM BSEMPMS WHERE DPT_NO='TEC305';
14. /*+ADD_EQUAL テーブル INDEX_NAM1,INDEX_NAM2,...*/
実行プランを明示的に選択し、複数の単一列インデックスのスキャンを結合するように求められます。
例えば:
SELECT /*+INDEX_FFS(BSEMPMS IN_DPTNO,IN_EMPNO,IN_SEX)*/ * FROM BSEMPMS WHERE EMP_NO='SCOTT' AND DPT_NO='TDC306';
15. /*+USE_CONCAT*/
クエリ内の WHERE の後の OR 条件を UNION ALL の結合クエリに変換します。
例えば:
SELECT /*+USE_CONCAT*/ * FROM BSEMMPMS WHERE DPT_NO='TDC506' AND SEX='M';
16. /*+NO_EXPAND*/
WHERE の後の OR または IN-LIST クエリ ステートメントの場合、NO_EXPAND を指定すると、オプティマイザに基づいて展開されなくなります。
例えば:
SELECT /*+NO_EXPAND*/ * FROM BSEMMPMS WHERE DPT_NO='TDC506' AND SEX='M';
17. /*+NOWRITE*/
クエリ ブロックに対するクエリ リライト操作は禁止されています。
18. /*+リライト*/
ビューはパラメータとして渡すことができます。
19. /*+MERGE(TABLE)*/
ビューのさまざまなクエリを適宜マージできます。
例えば:
SELECT /*+MERGE(V) */ A.EMP_NO,A.EMP_NAM,B.DPT_NO FROM BSEMPMS A (SELET DPT_NO)
,AVG(SAL) AS AVG_SAL FROM BSEMMPMS B GROUP BY DPT_NO) V WHERE A.DPT_NO=V.DPT_NO
かつ A.SAL>V.AVG_SAL;
20. /*+NO_MERGE(TABLE)*/
結合できるビューは結合されなくなりました。
例えば:
SELECT /*+NO_MERGE(V) */ A.EMP_NO,A.EMP_NAM,B.DPT_NO FROM BSEMPMS A (SELECT DPT_NO,AVG(SAL) AS AVG_SAL FROM BSEMPMS B GROUP BY DPT_NO) V WHERE A.DPT_NO=V.DPT_NOかつ A.SAL>V.AVG_SAL;
21. /*+注文済み*/
FROM に表が現れる順序に従って、ORDERED を指定すると、ORACLE はその順序で表に接続します。
例えば:
SELECT /*+ORDERED*/ A.COL1,B.COL2,C.COL3 FROM TABLE1 A,TABLE2 B,TABLE3 C WHERE A.COL1=B.COL1 AND B.COL1=C.COL1;
22. /*+USE_NL(TABLE)*/
指定されたテーブルを内部テーブルとして使用して、指定されたテーブルをネスト結合の行ソースと結合します。
例えば:
SELECT /*+ORDERED USE_NL(BSEMPMS)*/ BSDPTMS.DPT_NO,BSEMPMS.EMP_NO,BSEMPMS.EMP_NAM FROM BSEMPMS,BSDPTMS WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;
23. /*+USE_MERGE(TABLE)*/
マージ・ソート結合を使用して、指定されたテーブルを他の行ソースと結合します。
例えば:
SELECT /*+USE_MERGE(BSEMPMS,BSDPTMS)*/ * FROM BSEMPMS,BSDPTMS WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;
24. /*+USE_HASH(TABLE)*/
ハッシュ結合を使用して、指定されたテーブルを他の行ソースと結合します。
例えば:
SELECT /*+USE_HASH(BSEMPMS,BSDPTMS)*/ * FROM BSEMPMS,BSDPTMS WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;
25. /*+DRIVING_SITE(テーブル)*/
ORACLE によって選択された場所とは異なるテーブルに対してクエリを強制的に実行します。
例えば:
SELECT /*+DRIVING_SITE(DEPT)*/ * FROM BSEMPMS,DEPT@BSDPTMS WHERE BSEMPMS.DPT_NO=DEPT.DPT_NO;
26. /*+LEADING(TABLE)*/
指定したテーブルを結合順序の最初のテーブルとして使用します。
27. /*+キャッシュ(テーブル)*/
フル テーブル スキャンを実行する場合、CACHE ヒントは、バッファ キャッシュ内の最も最近使用されたリスト LRU の最後にテーブルの取得ブロックを配置できます。次に例を示します。
SELECT /*+FULL(BSEMPMS) CAHE(BSEMPMS) */ EMP_NAM FROM BSEMPMS;
28. /*+NOCACHE(テーブル)*/
フル テーブル スキャンを実行する場合、CACHE ヒントは、バッファ キャッシュ内の最も最近使用されたリスト LRU の最後にテーブルの取得ブロックを配置できます。次に例を示します。
SELECT /*+FULL(BSEMPMS) NOCAHE(BSEMPMS) */ EMP_NAM FROM BSEMPMS;
29. /*+追加*/
テーブルの端に直接挿入すると速度が向上します。
例えば:
insert /*+append*/ into test1 select * from test4 ;
30. /*+NOAPPEND*/
挿入ステートメントの有効期間中並列モードを停止することにより、通常の挿入を開始します。
例えば:
insert /*+noappend*/ into test1 select * from