SQL Hint的语法格式如下:
/*+ HINT_NAME */
或
/*+ HINT_NAME ( HINT_PARA )
如果是在命令行客户端 obclient 或 mysql 下连接 OceanBase,注意需要指定参数 -c ,这样 Hint 文本才会发送到 OBServer 端生效。
OceanBase 常用 SQL Hint 如下表所示:
Hint 名称 | Hint 参数 | Hint 语义 |
---|---|---|
NOREWRITE | 不改写 SQL。 | |
READ_CONSISTENCY | weak|strong|frozen | weak:弱一致性读 strong:强一致性读 frozen:读最近一次冻结点的数据 |
INDEX_HINT | [qb_name] table_nameindex_name | 指定查询表时选择的索引。 |
QUERY_TIMEOUT | int64 | 指定语句执行的超时时间,单位是微秒(us)。 |
LEADING | [qb_name] table_name [,tablename] | 指定多表连接时的顺序。 |
ORDERED | 指定多表连接顺序按SQL中表出现的顺序。 | |
FULL | [qb_name] table_name | 指定表的访问方式为全表扫描(有主键时会读主键)。 |
USE_MERGE | [qb_name] table_name [,table_name] | 指定多表连接时使用MERGE算法。 |
USE_NL | [qb_name] table_name [,table_name] | 指定多表连接时使用NEST LOOP算法。 |
USE_BNL | [qb_name] table_name [,table_name] | 指定多表连接时适用BLOCK NEST LOOP算法。 |
USE_HASH_AGGREGATION | [qb_name] | 指定 aggregate 方法使用HASH AGGREGATE,例如HASH GROUP BY,HASH DISTINCT。 |
NO_USE_HASH_AGGREGATION | [qb_name] | 指定 aggregate 方法不使用HASH AGGREGATE,使用MERGE GROUP BY,MERGE DISTINCT 。 |
QB_NAME | qb_name | 指定 query block的名称。 |
PARALLEL | int64 | 指定分布式执行的并行度。 |