Index Hints Optimizer Hints for Naming Query Blocks Table-level, index-level, and subquery optimizer hints permit specific query blocks to be named as part of their argument syntax. To create these names, use the  QB_NAME  hint, which assigns a name to the query block in which it occurs: QB_NAME  hints can be used to make explicit in a clear way which query blocks other hints apply to. They also permit all non-query block name hints to be specified within a single hint comment for easier understanding of complex statements. Consider the following statement: QB_NAME  hints assign names to query blocks in the statement: Then other hints can use those names to refer to the appropriate query blocks: The resulting effect is as follows: Query block names are identifiers and follow the usual rules about what names are valid and how to quote them (see Section 9.2, “Schema Object Names” ). For example, a query block name that contains spaces must be quoted, which can be done using backticks: If the  ANSI_QUOTES  SQL mode is enabled, it is also possible to quote query block names within double quotation marks: Index hints give the optimizer information about how to choose indexes during query processing. Index hints, described here, differ from optimizer hints, described in Section 8.9.3, “Optimizer Hints” . Index and optimizer hints may be used separately or together. Index hints apply only to  SELECT  and  UPDATE  statements. Index hints are specified following a table name. (For the general syntax for specifying tables in a  SELECT statement, see Section 13.2.10.2, “JOIN Clause” .) The syntax for referring to an individual table, including index hints, looks like this: 1806 8.9.4 Index Hints SELECT /*+ BKA(@"my hint name") */ ... FROM (SELECT /*+ QB_NAME("my hint name") */ ...) ... SELECT /*+ BKA(@‘my hint name‘) */ ... FROM (SELECT /*+ QB_NAME(‘my hint name‘) */ ...) ... SELECT ... FROM (SELECT ... FROM (SELECT ... FROM ...)) ... SELECT /*+ QB_NAME(qb1) */ ... FROM (SELECT /*+ QB_NAME(qb2) */ ... FROM (SELECT /*+ QB_NAME(qb3) */ ... FROM ...)) ... SELECT /*+ QB_NAME(qb1) MRR(@qb1 t1) BKA(@qb2) NO_MRR(@qb3t1 idx1, id2) */ ... FROM (SELECT /*+ QB_NAME(qb2) */ ... FROM (SELECT /*+ QB_NAME(qb3) */ ... FROM ...)) ... QB_NAME( name ) • MRR(@qb1 t1)  applies to table  t1  in query block  qb1 . • BKA(@qb2)  applies to query block  qb2 . • NO_MRR(@qb3 t1 idx1, id2)  applies to indexes  idx1  and  idx2  in table  t1  in query block  qb3 .