Optimizer hints appear as a comment following the first word of the SQL statement (for example, SELECT, INSERT, DELETE, or UPDATE). Hints are differentiated from other comments by the presence of the plus sign (+) following the opening comment delimiter (/*). For instance, the FULL hint in the following example tells the optimizer to perform a full table scan when resolving the query:
SELECT /*+ FULL(E) */ *
FROM EMPLOYEE E
WHERE SALARY > 1000000
The following list shows the hints that can be used:
| Hint | Description | 
|---|---|
| ALL_ROWS | Use the cost-based optimizer and optimize for the retrieval of all rows. | 
| AND_EQUAL (table_name index_name index_name ....) | Retrieve rows from the specified table using each of the specified indexes and merge the results. | 
| APPEND | Invokes a direct load insert. Only valid for insert … select from statements. | 
| BITMAP (table_name index_name) | Retrieve rows from the specified table using the specified bitmap index. | 
| CACHE (table_name) | Encourages rows retrieved by a full table scan to remain in the buffer cache of the SGA. | 
| CHOOSE | If statistics have been collected for any table involved in the SQL statement, use cost-based or all-rows optimization, otherwise use rule-based optimization. | 
| CLUSTER (table_name) | Uses a cluster scan to retrieve table rows. | 
| DRIVING_SITE (table_name) | For a distributed SQL statement, this causes the site at which the specified table resides to be the driving site. | 
| FIRST_ROWS | Specifies that the cost-based optimizer should optimize the statement to reduce the cost of retrieving the first row only. | 
| FULL (table_name) | Use a full table scan to retrieve rows from the specified table. | 
| HASH (table_name) | Use a hash scan to retrieve rows from the specified table. The table must be stored in a hash cluster. | 
| HASH_AJ | Perform an anti-join using hash join methodology. This hint must appear after the select statement, not in sub-query. | 
| HASH_SJ | Appears within an EXISTS sub-query. Invokes a hash semi-join. | 
| INDEX (table_name [index_name]) | Uses the specified index to retrieve rows from the table or, if no index is specified, uses any index. | 
| INDEX_ASC (table_name [index_name]) | Specifies an ascending index range scan using the specified index or, if no index is specified, any suitable index. | 
| INDEX_COMBINE (table_name [index_name…]) | Instructs the optimizer to combine the specified bitmap indexes. If no bitmap indexes are specified, the optimizer chooses suitable bitmap indexes. | 
| INDEX_DESC (table_name [index_name]) | Specifies a descending index range scan using the specified index or, if no index is specified, any suitable index. | 
| INDEX_FFS (table_name [index_name]) | Invokes a fast full index scan using the specified index or, if no index is specified, any suitable index. A fast full scan reads the entire index in block order, using multi-block reads and possibly parallel query. | 
| MERGE | Instructs the optimizer to perform complex view merging when resolving a query based on a view, or one that includes a sub-query in the WHERE clause. | 
| NO_MERGE | Instructs the optimizer not to perform complex view merging when resolving a query based on a view, or one that includes a sub-query in the WHERE clause. | 
| MERGE_AJ | Performs an anti-join using sort-merge join method. This hint must appear after the SELECT statement, not in a sub-query. | 
| MERGE_SJ | Appears within an EXISTS sub-query. Invokes a sort-merge semi-join. | 
| NO_EXPAND (table_name) | Oracle sometimes expands statements with OR conditions into multiple SQL statements combined by a union operation. This hint instructs the optimizer not to do this, even if it calculates that such a transformation would be beneficial. | 
| NO_INDEX (table_name [index_name] ) | No index suppresses the use of the named indexes or, if no indexes are specified, all indexes on the named table. | 
| NO_PUSH_PRED | Instructs not to push join conditions from the WHERE clause into a view or sub-query. | 
| NOAPPEND | Suppresses direct load insert in an INSERT… SELECT FROM... statement. | 
| NOCACHE (table_name) | Discourages Oracle from keeping rows retrieved by a full table scan in the buffer cache of the SGA. Overrides the cache setting on the CREATE or ALTER TABLE statement. | 
| NOPARALLEL (table_name) | Do not use parallel processing for the SQL statement. Overrides the parallel setting on the CREATE or ALTER TABLE statement. | 
| NOPARALLEL_INDEX (table_name index_name) | Suppresses parallelism in fast full index scans or in partitioned index access. | 
| NOREWRITE | Prevents the SQL statement from being rewritten to take advantage of materialized views. It overrides the server parameter query_rewrite_enabled. | 
| ORDERED | Instructs the optimizer to join the tables in exactly the left to right order specified in the FROM clause. | 
| ORDERED_PREDICATES | Causes predicates in the WHERE clause to be evaluated in the order in which they appear in the WHERE clause. | 
| PARALLEL (table_name , degree_of_parallelism) | Instructs the optimizer to perform parallel scans on the named table. If no degree of parallelism is specified, the default is used. | 
| PARALLEL_INDEX (table_name [index_name]) | Parallelizes a fast full index scan, or an index scan against a partitioned index. | 
| PQ_DISTRIBUTE (table_name outer_distribution inner_distribution) | This query determines how a parallel join using table_name is executed. Valid options for outer_distribution and inner_distribution are (not all combinations are valid) hash, broadcast, none, partition. | 
| PUSH_JOIN_PRED/ PUSH_PRED | Push join conditions from the WHERE clause into a view or sub-query. | 
| PUSH_SUBQ | Causes sub-queries to be processed earlier in the execution plan. Normally, sub-queries are processed last, unless the SQL statement is transformed into join. | 
| REWRITE (view_name [view_name…]) | Restricts query rewrite to only those materialized views specified in the hint. | 
| ROWID (table_name) | Performs a ROWID access. | 
| RULE | Uses rule-based optimization. | 
| STAR | Considers the STAR join methodology in preference to other methods. | 
| STAR_TRANSFORMATION | Requests that the star transformation optimization be performed. This transforms a star query into an alternate form that can take advantage of bitmap indexes. | 
| USE_CONCAT | Oracle sometimes expands statements with OR conditions into multiple SQL statements combined by union all. This hint instructs the optimizer to do this, even if it calculates that such a transformation would not be beneficial. | 
| USE_HASH (table_name) | When joining to this table, use the hash join method. | 
| USE_MERGE (table_name) | When joining to this table, use the sort-merge join method. | 
| USE_NL (table_name) | When joining to this table, use the nested-loops join method. |