Skip to content

Commit

Permalink
fix optimizer hint identifier (#13500)
Browse files Browse the repository at this point in the history
  • Loading branch information
ran-huang authored May 9, 2023
1 parent 862c954 commit 2e7ca30
Showing 1 changed file with 27 additions and 9 deletions.
36 changes: 27 additions & 9 deletions optimizer-hints.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,35 @@ TiDB supports optimizer hints, which are based on the comment-like syntax introd
## Syntax

> **Note:**
>
> If the table you want to hint is not in the database specified by `USE DATABASE`, you need to specify the database name explicitly. For example:
>
> ```sql
> tidb> SELECT /*+ HASH_JOIN(t2, t) */ * FROM t, test2.t2;
> Empty set, 1 warning (0.00 sec)
>
> tidb> SHOW WARNINGS;
> +---------+------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
> | Level | Code | Message |
> +---------+------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
> | Warning | 1815 | There are no matching table names for (t2) in optimizer hint /*+ HASH_JOIN(t2, t) */ or /*+ TIDB_HJ(t2, t) */. Maybe you can use the table alias name |
> +---------+------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
> 1 row in set (0.00 sec)
>
> tidb> SELECT /*+ HASH_JOIN(test2.t2, t) */ * FROM t, test2.t2;
> Empty set (0.00 sec)
>
> tidb> SELECT /*+ READ_FROM_STORAGE(TIFLASH[test1.t1,test2.t2]) */ t1.a FROM test1.t t1, test2.t t2 WHERE t1.a = t2.a;
> Empty set (0.00 sec)
>
> ```
>
> The examples in this document are all tables in the same database. If the tables you use are not in the same database, refer to the instructions to explicitly specify the database name.
Optimizer hints are case insensitive and specified within `/*+ ... */` comments following the `SELECT`, `UPDATE` or `DELETE` keyword in a SQL statement. Optimizer hints are not currently supported for `INSERT` statements.
Multiple hints can be specified by separating with commas. For example, the following query uses three different hints:
Multiple hints can be specified by separating with commas. For example, the following query uses three different hints:
{{< copyable "sql" >}}
Expand Down Expand Up @@ -465,14 +491,6 @@ The `READ_FROM_STORAGE(TIFLASH[t1_name [, tl_name ...]], TIKV[t2_name [, tl_name
select /*+ READ_FROM_STORAGE(TIFLASH[t1], TIKV[t2]) */ t1.a from t t1, t t2 where t1.a = t2.a;
```

> **Note:**
>
> If you want the optimizer to use a table from another schema, you need to explicitly specify the schema name. For example:
>
> ```sql
> SELECT /*+ READ_FROM_STORAGE(TIFLASH[test1.t1,test2.t2]) */ t1.a FROM test1.t t1, test2.t t2 WHERE t1.a = t2.a;
> ```
### USE_INDEX_MERGE(t1_name, idx1_name [, idx2_name ...])

The `USE_INDEX_MERGE(t1_name, idx1_name [, idx2_name ...])` hint tells the optimizer to access a specific table with the index merge method. Index merge has two types: intersection type and union type. For details, see [Explain Statements Using Index Merge](/explain-index-merge.md).
Expand Down

0 comments on commit 2e7ca30

Please sign in to comment.