欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/
初次使用 OceanBase 数据库的用户,经常会用大表测试各种查询,可以在查询中使用 SQL Hint 来控制 SQL 执行时的一些参数设置,例如设置一致性级别和 SQL 超时时间等。
关于 SQL Hint
OceanBase 数据库 SQL 的执行性能跟 SQL 的执行计划有关,执行计划跟表的联接方式、查询条件和表的索引都有关系,通常这属于数据库的 SQL 引擎内部逻辑。通过在 SQL 里添加 Hint 注释,您可以改变执行计划的内容,从而改变 SQL 的执行性能。
一条语句只能包含一个 Hint 注释,并且该注释必须跟随 SELECT、UPDATE、INSERT、REPLACE 或 DELETE 关键字。
Hint 在语句注释中的语法格式如下:
{DELETE|INSERT|SELECT|UPDATE|REPLACE} /*+ [hint_text]... */
常用 SQL Hint 如下:
READ_CONSISTENCYHint 弱一致性读,指定某条 SQL 所读取的表模式为弱一致性(指定参数WEAK)或强一致性(指定参数STRONG),指引 SQL 读取相关表的分区的备副本。说明
READ_CONSISTENCYHint 仅仅是使当前查询可以进行弱一致性读,完全的读写分离还是要有路由等的支持。OceanBase 数据库的读写分离功能依赖 ODP 的 LDC 功能,如果需要使用读写分离功能,建议先进行 LDC 配置。有关读写分离的详细信息,请参见 读写分离 。INDEXHint 指示优化器对指定的表使用索引扫描。QUERY_TIMEOUTHint 指示服务器设定某条 SQL 执行时的超时时间,单位是 us。
使用 SQL Hint 示例
SQL Hint 通常用在 SQL 语句里,并不限于查询 SQL。这里以查询 SQL 为例,简单的语法格式如下:
SELECT /*+ hint_text [, hint_text] */ select_items FROM table_name;
说明
- 多个 SQL Hint 可以叠加使用,注意功能不要冲突。
- 在
obclient命令行环境下,默认会忽略注释语法,导致 SQL Hint 不起作用,所以启动obclient时需要增加参数"-c"。
指定 SQL 所读取的表模式为弱一致性
obclient> SELECT /*+ READ_CONSISTENCY(WEAK) */ *
FROM employees
WHERE employees.department_id = 1001;
Query OK, 0 row affected
指定 SQL 强制走索引
obclient> SELECT /*+ INDEX (employees emp_department_ix)*/ employee_id, department_id
FROM employees
WHERE department_id > 50;
指定数据库按照表在 FROM 子句中出现的顺序进行表联接
obclient> SELECT /*+ ORDERED */ *
FROM employees t1,department t2
WHERE t1.department_id = t2.department_id;
Query OK, 0 row affected
使用 SQL Hint 指定查询超时时间为 10 秒
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
欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/




