登录 | 注册
首页
方案案例
技术社区
资源中心
培训体系
服务合作
关于我们
解决hint三大块难点
Hint 是用于用户直接向 SUNDB 优化器指示 SQL 语句执行方法的 comment。由于统计信息不准确而 SUNDB 优化器无法准确判断执行计划时,用户可使用 hint 直接选择执行计划
码筑匠心
专栏:数据架构师笔记 2024-07-29 7 2
分享到:

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,因此有优先描述的时,忽略PUSH_SUBQ 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,但统计信息不准确时


2
评论

登录后发表回复

暂无评论
专栏作者
码筑匠心

技术专家

  • 文章

    9
  • 阅读量

    53
  • 获赞

    7
数据库适配过程中的经验分享
专栏其它文章更多 》

SUNDB

常见问题集锦

SUNDB

免费试用

回复