88 lines
2.4 KiB
Markdown
88 lines
2.4 KiB
Markdown
在查询中使用 SQL Hint
|
|
====================================
|
|
|
|
|
|
|
|
初次使用 OceanBase 的用户,经常会用大表测试各种查询,有时会感觉性能不是很快,此时需要在查询中使用 SQL Hint。
|
|
|
|
关于 SQL Hint
|
|
--------------------
|
|
|
|
OceanBase SQL 的执行性能跟 SQL 的执行计划有关,执行计划跟表的连接方式、查询条件和表的索引都有关系,通常这是数据库的 SQL 引擎内部逻辑。通过在 SQL 里添加注释,您可能改变执行计划的内容,从而改变 SQL 的执行性能。SQL Hint 的格式是:
|
|
|
|
```javascript
|
|
/*+ hint_text */
|
|
```
|
|
|
|
|
|
|
|
常用 SQL Hint 有:
|
|
|
|
* **read_consistency(weak)** :弱一致性读,指引SQL读取相关表的分区的备副本。
|
|
|
|
* **index** ( *table_name* , *index_name* ):指引SQL使用某个表的某个索引读取数据。
|
|
|
|
* **query_timeout(int_num):** 设置当前SQL的查询超时时间,单位是us。
|
|
|
|
|
|
|
|
|
|
其他常用 SQL Hints 请参考附录 **OceanBase 常用 SQL Hints** 。
|
|
|
|
|
|
|
|
使用 SQL Hint
|
|
--------------------
|
|
|
|
SQL Hint 通常用在 SQL 里,并不限于查询 SQL。这里以查询 SQL 为例,简单的语法格式如下:
|
|
|
|
```javascript
|
|
SELECT /*+ hint_text [, hint_text] */ select_items FROM table_name
|
|
```
|
|
|
|
|
|
**说明**
|
|
|
|
|
|
|
|
* 多个 SQL Hint 可以叠加使用,注意功能不要冲突。
|
|
|
|
|
|
|
|
* 在 obclient 命令行环境下,默认会忽略注释语法,导致 SQL Hint 不起作用,所以启动 obclient 时需要增加参数"-c"。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
示例:在查询 SQL 中使用 SQL Hint,下面 SQL 指定查询超时时间为 10 秒。
|
|
|
|
```javascript
|
|
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 (0.00 sec)
|
|
|
|
|
|
obclient> SELECT /*+ no_use_px paratLel(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 (0.01 sec)
|
|
|
|
obclient>
|
|
```
|
|
|
|
|
|
|