Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

planner: update the doc for merge hint #10373

Merged
merged 27 commits into from
Jul 26, 2022
Merged
Show file tree
Hide file tree
Changes from 26 commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
6f6a996
add CTE Inline doc changes
dayicklp Jul 6, 2022
971dd44
Update dev-guide-use-common-table-expression.md
dayicklp Jul 6, 2022
48fe25c
Update optimizer-hints.md
dayicklp Jul 6, 2022
0c14645
Update optimizer-hints.md
dayicklp Jul 6, 2022
9bedf57
add some attention
dayicklp Jul 19, 2022
e0cf565
Merge remote-tracking branch 'upstream/master' into sprint9
dayicklp Jul 19, 2022
cd29cfb
Update optimizer-hints.md
dayicklp Jul 19, 2022
56249b6
Update optimizer-hints.md
dayicklp Jul 19, 2022
0843c9b
Update optimizer-hints.md
dayicklp Jul 20, 2022
e0b1f12
Update optimizer-hints.md
dayicklp Jul 20, 2022
b27d449
Update optimizer-hints.md
dayicklp Jul 20, 2022
398ebde
Update optimizer-hints.md
dayicklp Jul 20, 2022
4e139d1
Update develop/dev-guide-use-common-table-expression.md
dayicklp Jul 21, 2022
85268f9
Update develop/dev-guide-use-common-table-expression.md
dayicklp Jul 21, 2022
b3df7fb
Update optimizer-hints.md
dayicklp Jul 21, 2022
9eeb0ac
Update optimizer-hints.md
dayicklp Jul 21, 2022
aadac06
Update optimizer-hints.md
dayicklp Jul 21, 2022
d9773b7
Update optimizer-hints.md
dayicklp Jul 21, 2022
ccb8682
Update optimizer-hints.md
dayicklp Jul 21, 2022
40c8ad3
Update optimizer-hints.md
dayicklp Jul 21, 2022
bccc8f8
Update optimizer-hints.md
dayicklp Jul 21, 2022
a994799
Merge branch 'sprint9' of https://github.com/dayicklp/docs-cn into sp…
dayicklp Jul 21, 2022
760361f
Update optimizer-hints.md
dayicklp Jul 22, 2022
92ca603
Update optimizer-hints.md
dayicklp Jul 22, 2022
2f530e9
very minor refine
TomShawn Jul 22, 2022
cf2557e
Update optimizer-hints.md
dayicklp Jul 23, 2022
5b9f7f5
Update optimizer-hints.md
dayicklp Jul 26, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions develop/dev-guide-use-common-table-expression.md
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,10 @@ FROM

值得注意的是,`books_authored_by_rm` 中的查询只会执行一次,TiDB 会开辟一块临时空间对查询的结果进行缓存,当 `books_with_average_ratings` 和 `books_with_orders` 引用时会直接从该临时空间当中获取数据。

> **建议:**
>
> 当默认的 CTE 查询执行效率不高时,你可以使用 [`MERGE()`](/optimizer-hints.md#merge) hint,将 CTE 子查询拓展到外部查询,以此提高执行效率。

### 递归的 CTE

递归的公共表表达式可以使用如下语法进行定义:
Expand Down
23 changes: 23 additions & 0 deletions optimizer-hints.md
Original file line number Diff line number Diff line change
Expand Up @@ -286,6 +286,29 @@ SHOW WARNINGS;
+---------+------+-------------------------------------------------------------------------------------------------------------------+
```

### MERGE()

在含有[公共表表达式](/develop/dev-guide-use-common-table-expression.md)的查询中使用 `MERGE()` hint,可关闭对当前子查询的物化过程,并将内部查询的内联展开到外部查询。该 hint 适用于非递归的公共表表达式查询,在某些场景下,使用该 hint 会比默认分配一块临时空间的语句执行效率更高。例如将外部查询的条件下推或在嵌套的 CTE 查询中:

{{< copyable "sql" >}}

```sql
-- 使用 hint 将外部查询条件的谓词下推
WITH CTE AS (SELECT /*+ MERGE() */ * FROM tc WHERE tc.a < 60) SELECT * FROM CTE WHERE CTE.a <18;

-- 在嵌套 CTE 查询中使用该 hint 来指定将某个 CTE 内联展开到外部查询
WITH CTE1 AS (SELECT * FROM t1), CTE2 AS (WITH CTE3 AS (SELECT /*+ MERGE() */ * FROM t2) ,CTE4 AS (SELECT * FROM t3) SELECT * FROM CTE3,CTE4) SELECT * FROM CTE1,CTE2;
```

> **注意:**
>
> `MERGE()` 只适用于简单的 CTE 查询,在以下情况下无法使用该 hint:
>
> - [递归的 CTE 查询](/develop/dev-guide-use-common-table-expression.md#递归的-cte)
> - 子查询中有无法进行内联展开的部分,例如聚合算子、窗口函数以及 `DINSTINCT` 等
>
> 当 CTE 引用次数过多时,查询性能可能低于默认的物化方式。

## 查询范围生效的 Hint

这类 Hint 只能跟在语句中**第一个** `SELECT`、`UPDATE` 或 `DELETE` 关键字的后面,等同于在当前这条查询运行时对指定的系统变量进行修改,其优先级高于现有系统变量的值。
Expand Down