---
title: "在查询中使用 SQL Hint - OceanBase 数据库 V4.1.0 | OceanBase 文档中心"
description: 在查询中使用 SQL Hint 初次使用 OceanBase 数据库的用户，经常会用大表测试各种查询，可以在查询中使用 SQL Hint 来控制 SQL 执行时的一些参数设置，例如设置一致性级别和 SQL 超时时间等。 关于 SQL Hint OceanBase 数据库 SQL 的执行性能跟 SQL 的执行计划有关，…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.1.0

# 在查询中使用 SQL Hint

更新时间：2023-08-01 11:45:47

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.1.0/zh-CN/300.develop/100.application-development-of-mysql-mode/400.read-data-of-mysql-mode/1000.use-sql-hints-in-query-of-mysql-mode.md)  

初次使用 OceanBase 数据库的用户，经常会用大表测试各种查询，可以在查询中使用 SQL Hint 来控制 SQL 执行时的一些参数设置，例如设置一致性级别和 SQL 超时时间等。

## 关于 SQL Hint

OceanBase 数据库 SQL 的执行性能跟 SQL 的执行计划有关，执行计划跟表的联接方式、查询条件和表的索引都有关系，通常这属于数据库的 SQL 引擎内部逻辑。通过在 SQL 里添加 Hint 注释，您可以改变执行计划的内容，从而改变 SQL 的执行性能。

一条语句只能包含一个 Hint 注释，并且该注释必须跟随 `SELECT`、`UPDATE`、`INSERT`、`REPLACE` 或 `DELETE` 关键字。

Hint 在语句注释中的语法格式如下：

```sql
{DELETE|INSERT|SELECT|UPDATE|REPLACE} /*+ [hint_text]... */

```

常用 SQL Hint 如下：

- `READ_CONSISTENCY` Hint 弱一致性读，指定某条 SQL 所读取的表模式为弱一致性（指定参数 `WEAK`）或强一致性（指定参数 `STRONG`），指引 SQL 读取相关表的分区的备副本。

  #### 说明

  `READ_CONSISTENCY` Hint 仅仅是使当前查询可以进行弱一致性读，完全的读写分离还是要有路由等的支持。OceanBase 数据库的读写分离功能依赖 ODP 的 LDC 功能，如果需要使用读写分离功能，建议先进行 LDC 配置。有关读写分离的详细信息，请参见 [读写分离](https://www.oceanbase.com/docs/common-oceanbase-database-cn-10000000001702467) 。
 - `INDEX` Hint 指示优化器对指定的表使用索引扫描。
 - `QUERY_TIMEOUT` Hint 指示服务器设定某条 SQL 执行时的超时时间，单位是 us。

有关其他常用 SQL Hint 的详细信息，请参考 [注释](https://www.oceanbase.com/docs/common-oceanbase-database-cn-10000000001702366) 章节。

## 使用 SQL Hint 示例

SQL Hint 通常用在 SQL 语句里，并不限于查询 SQL。这里以查询 SQL 为例，简单的语法格式如下：

```sql
SELECT /*+ hint_text [, hint_text] */ select_items FROM table_name;

```

#### 说明

- 多个 SQL Hint 可以叠加使用，注意功能不要冲突。
 - 在 `obclient` 命令行环境下，默认会忽略注释语法，导致 SQL Hint 不起作用，所以启动 `obclient` 时需要增加参数"-c"。

### 指定 SQL 所读取的表模式为弱一致性

```sql
obclient> SELECT /*+ READ_CONSISTENCY(WEAK) */ *
    FROM employees
    WHERE employees.department_id = 1001;
Query OK, 0 row affected

```

### 指定 SQL 强制走索引

```sql
obclient> SELECT /*+ INDEX (employees emp_department_ix)*/ employee_id, department_id
FROM employees
WHERE department_id > 50;

```

### 指定数据库按照表在 `FROM` 子句中出现的顺序进行表联接

```sql
obclient> SELECT /*+ ORDERED */ *
    FROM employees t1,department t2
    WHERE t1.department_id = t2.department_id;
Query OK, 0 row affected

```

### 使用 SQL Hint 指定查询超时时间为 10 秒

```sql
obclient> SELECT /*+ query_timeout(10000000) */ o_id,o_c_id,o_carrier_id,o_ol_cnt,o_all_local,o_entry_d
    FROM ordr
    WHERE o_w_id=1 and o_d_id=2 AND o_id=2100;
+------+--------+--------------+----------+-------------+------------+
| o_id | o_c_id | o_carrier_id | o_ol_cnt | o_all_local | o_entry_d  |
+------+--------+--------------+----------+-------------+------------+
| 2100 |      8 |            8 |       11 |           1 | 2020-02-15 |
+------+--------+--------------+----------+-------------+------------+
1 row in set

```

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
