初次使用 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_CONSISTENCY
Hint 弱一致性读,指定某条 SQL 所读取的表模式为弱一致性(指定参数WEAK
)或强一致性(指定参数STRONG
),指引 SQL 读取相关表的分区的备副本。说明
READ_CONSISTENCY
Hint 仅仅是使当前查询可以进行弱一致性读,完全的读写分离还是要有路由等的支持。OceanBase 数据库的读写分离功能依赖 OBProxy 的 LDC 功能,如果需要使用读写分离功能,建议先进行 LDC 配置。有关读写分离的详细信息,请参见 读写分离。INDEX
Hint 指示优化器对指定的表使用索引扫描。QUERY_TIMEOUT
Hint 指示服务器设定某条 SQL 执行时的超时时间,单位是 us。
有关其他常用 SQL Hint 的详细信息,请参考 注释 章节。
使用 SQL Hint
SQL Hint 通常用在 SQL 语句里,并不限于查询 SQL。这里以查询 SQL 为例,简单的语法格式如下:
SELECT /*+ hint_text [, hint_text] */ select_items FROM table_name;
复制
说明
- 多个 SQL Hint 可以叠加使用,注意功能不要冲突。
- 在
obclient
命令行环境下,默认会忽略注释语法,导致 SQL Hint 不起作用,所以启动obclient
时需要增加参数"-c"。
示例 1:指定 SQL 所读取的表模式为弱一致性
obclient> SELECT /*+ READ_CONSISTENCY(WEAK) */ * FROM employees WHERE employees.department_id = 1001; Query OK, 0 row affected
复制
示例 2:指定 SQL 强制走索引
obclient> SELECT /*+ INDEX (employees emp_department_ix)*/ employee_id, department_id FROM employees WHERE department_id > 50;
复制
示例 3:指定数据库按照表在 FROM
子句中出现的顺序进行表联接
obclient> SELECT /*+ ORDERED */ * FROM employees t1,department t2 WHERE t1.department_id = t2.department_id; Query OK, 0 row affected
复制
示例 4:使用 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
复制
示例 5:在执行 SQL 语句时避免使用并行查询模式
obclient> SELECT /*+ no_use_px parallel(8) */ * FROM( SELECT /*+ no_use_px parallel(8) */ no_w_id, no_d_id, MAX(no_o_id) max_no_o_id, MIN(no_o_id) min_no_o_id, COUNT(*) count_no FROM nord GROUP BY no_w_id, no_d_Id ) x WHERE max_no_o_id - min_no_o_id+ 1!= count_no; Empty set
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
2025年4月中国数据库流行度排行榜:OB高分复登顶,崖山稳驭撼十强
墨天轮编辑部
1658次阅读
2025-04-09 15:33:27
2025年3月国产数据库大事记
墨天轮编辑部
818次阅读
2025-04-03 15:21:16
2025年3月国产数据库中标情况一览:TDSQL大单622万、GaussDB大单581万……
通讯员
578次阅读
2025-04-10 15:35:48
征文大赛 |「码」上数据库—— KWDB 2025 创作者计划启动
KaiwuDB
488次阅读
2025-04-01 20:42:12
数据库,没有关税却有壁垒
多明戈教你玩狼人杀
463次阅读
2025-04-11 09:38:42
国产数据库需要扩大场景覆盖面才能在竞争中更有优势
白鳝的洞穴
445次阅读
2025-04-14 09:40:20
Oracle SQL 执行计划分析与优化指南
Digital Observer
403次阅读
2025-04-01 11:08:44
最近我为什么不写评论国产数据库的文章了
白鳝的洞穴
373次阅读
2025-04-07 09:44:54
天津市政府数据库框采结果公布!
通讯员
348次阅读
2025-04-10 12:32:35
优炫数据库成功入围新疆维吾尔自治区行政事业单位数据库2025年框架协议采购!
优炫软件
327次阅读
2025-04-18 10:01:22