Hint 是用于用户直接向 SUNDB 优化器指示 SQL 语句执行方法的 comment。
由于统计信息不准确而 SUNDB 优化器无法准确判断执行计划时,用户可使用 hint 直接选择执行计划
5.1语句 hint
1) DML_GLOBAL_ROWID
在集群环境处理 DML 语句时,有接收 user 查询的 node 向其他 node 传输记录变更信息并反映。
在集群环境中,DML 语句按照以下两种方式处理。
●基于 Query 的 DML: 构成新的查询并传输变更语句。
●基于 Global rowid 的 DML: 使用记录标识符信息向特定记录传输变更信息。
2) FETCH_FAIL_OVER
Fetch fail over 功能考虑到在集群环境中对 SELECT 语句执行 fetch 的过程中发生通信障碍的情况而提供完整的 fetch 结果。
使用 FETCH_FAIL_OVER hint 可激活 fetch fail over 功能。
5.2 查询块 hint
1)UNNEST
描述 UNNEST hint 时,优化器将子查询转换为保证相同结果的 join 语句。
但满足subquery unnesting 约束条件时才可适用 hint。无法适用 hint 的子查询,忽略 hint。
2)PUSH_SUBQ
描述 PUSH_SUBQ hint 时,优化器将该子查询 push 到可处理的执行计划节点中最下级的节点。
是未 unnest 的子查询的 hint,因此有优先描述的
3)UNNEST_NL
描述 UNNEST_NL hint 时,优化器将子查询转换为保证相同结果的 join 语句,并以nested loop join 方式执行其 join。
4)UNNEST_NL_IN
描述 UNNEST_NL_IN hint 时,优化器将子查询转换为保证相同结果的 join 语句,并以nested loop join 方式执行其 join。
并且将 unnest 到表或 view 的子查询放在 join 的 right
5)UNNEST_HASH
描述 UNNEST_HASH hint 时,优化器将子查询转换为保证相同结果的 join 语句,并以hash join 方式执行其 join
6)UNNEST_MERGE
描述 UNNEST_MERGE hint 时,优化器将子查询转换为保证相同结果的 join 语句,并以merge join 方式执行其 join
7)HASH_SJ
描述 HASH_SJ hintt 时,优化器以 semi join 形式 unnest 子查询,并以 hash join 方式执行其 semi join。
与 UNNEST_HASH hint 的运行方式相同,但 UNNEST_HASH hint 均适用于semi join、anti-semi join,
而 HASH_SJ hint 仅适用于 semi join。
8)NL_AJ
描述 NL_AJ hint 时,优化器以 anti-semi join 形式 unnest 子查询,并以 nested loop 方式执行其 semi join。
与 UNNEST_NL hint 的运行方式相同,但 UNNEST_NL hint 均适用于 semi join 和 anti-semi join,
而 NL_AJ hint 仅适用于 anti-semi join
9)LOCAL_UNNEST
描述 LOCAL_UNNEST hint 时,优化器将子查询变更为保证相同结果的 join 语句后在local 执行其 join。
即:将 left child 和 right child 的结果均获取到 local 后执行 join
10)NO_PUSHER_SUBQ
优化器将子查询转换为保证相同结果的 join 语句后在 remote 执行其 join 时,使 unnest子查询后生成的
view 或 table 无法部署到 pusher table
11)PUSHER_SUBQ
优化器将子查询变更为保证相同结果的 join 语句后在 remote 执行其 join 时,将 unnest子查询生成的 view 或
表部署到 pusher table。
12)TRANSITIVE_CLOSURE
描述 TRANSITIVE_CLOSURE hint 时,在 rewriter 过程中适用 join transitive closure 技法
5.3 Operation hint
1)FULL( table_name)
优化器对描述的 table 执行 table full scan
2)INDEX(index_name)
优化器对描述的 table 执行 indexscan。此时,在列出的 index 中选择 cost 最佳的index,
为列出 index_name 时,在该表的所有 index 中选择 cost 最佳的 index。
3)NO_INDEX(index_name)
优化器指定不使用描述的索引。未列出索引名时,不使用所有索引。即,不进行索引扫描
4)INDEX_COMBINE(table_name,[index_name])
决定各个 index scan 时,在列出的 index 中选择 cost 最佳的 index。
未列出 index_name时,在该 table 的所有 index 中选择 cost 最佳的 index。因此根据 OR 语句,可选择不同的index
5)IN_KEY_RANGE(table_name,[index_name])
优化器对描述的表执行 IN key range scan。此时,在列出的 index 中选择 cost 最佳的index,
未列出 index_name 时,在该表的所有 index 中选择 cost 最佳的 index。
6)ROWID( table_name )
优化器对描述的 table 执行 rowid scan, 适用 ROWID hint 时,该表中应有使用 ROWID的 equal 条件。
没有这种条件时,优化器忽略此 hint
7)MERGE_GROUP
满足如下条件时可使用 MERGE_GROUP hint。
●有 Group By 子句。
●可以以 Remote group 执行。
●在 group 节点的下级节点中,中间结果以保证 group by key column 的 order 的状态上升
8)USE_ORDER_SORT
描述 USE_ORDER_SORT hint 时,优化器使用 sort instant 处理 order by。
处理 order by 时使用 sort instant。而从下级节点 row 对 sort key column 排列上来时不积累 sort instant 并处理 order by。
优化器执行 cost estimation 时,不积累 sort instant,诱导下级节点使用 index,但统计信息不准确时
登录后发表回复
技术专家
文章
9阅读量
53获赞
7码筑匠心 2024-07-30
码筑匠心 2024-07-30
码筑匠心 2024-07-29
码筑匠心 2024-07-29
码筑匠心 2024-07-29