当前位置: 首页 > news >正文

openGauss学习笔记-249 openGauss性能调优-使用Plan Hint进行调优-Join顺序的Hint

文章目录

    • openGauss学习笔记-249 openGauss性能调优-使用Plan Hint进行调优-Join顺序的Hint
      • 249.1 功能描述
      • 249.2 语法格式
      • 249.3 参数说明
      • 249.4 示例

openGauss学习笔记-249 openGauss性能调优-使用Plan Hint进行调优-Join顺序的Hint

249.1 功能描述

指明join的顺序,包括内外表顺序。

249.2 语法格式

  • 仅指定join顺序,不指定内外表顺序。
leading(join_table_list) 
  • 同时指定join顺序和内外表顺序,内外表顺序仅在最外层生效。
leading((join_table_list)) 

249.3 参数说明

join_table_list为表示表join顺序的hint字符串,可以包含当前层的任意个表(别名),或对于子查询提升的场景,也可以包含子查询的hint别名,同时任意表可以使用括号指定优先级,表之间使用空格分隔。

img 须知:
表只能用单个字符串表示,不能带schema。
表如果存在别名,需要优先使用别名来表示该表。

join table list中指定的表需要满足以下要求,否则会报语义错误。

  • list中的表必须在当前层或提升的子查询中存在。
  • list中的表在当前层或提升的子查询中必须是唯一的。如果不唯一,需要使用不同的别名进行区分。
  • 同一个表只能在list里出现一次。
  • 如果表存在别名,则list中的表需要使用别名。

例如:

leading(t1 t2 t3 t4 t5)表示:t1、t2、t3、t4、t5先join,五表join顺序及内外表不限。

leading((t1 t2 t3 t4 t5))表示:t1和t2先join,t2做内表;再和t3 join,t3做内表;再和t4 join,t4做内表;再和t5 join,t5做内表。

leading(t1 (t2 t3 t4) t5)表示:t2、t3、t4先join,内外表不限;再和t1、t5 join,内外表不限。

leading((t1 (t2 t3 t4) t5))表示:t2、t3、t4先join,内外表不限;在最外层,t1再和t2、t3、t4的join表join,t1为外表,再和t5 join,t5为内表。

leading((t1 (t2 t3) t4 t5)) leading((t3 t2))表示:t2、t3先join,t2做内表;然后再和t1 join,t2、t3的join表做内表;然后再依次跟t4、t5做join,t4、t5做内表。

249.4 示例

示例中原语句使用如下hint:

explain
select /*+ leading((((((store_sales store) promotion) item) customer) ad2) store_returns) leading((store store_sales))*/ i_product_name product_name ...

该hint表示:表之间的join关系是:store_sales和store先join,store_sales做内表,然后依次跟promotion, item, customer, ad2, store_returns做join。生成计划如下所示:

img

图中计划顶端warning的提示详见Hint的错误、冲突及告警的说明。

👍 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!

图片

http://www.lryc.cn/news/323800.html

相关文章:

  • 大规模预训练语言模型的可解释性研究与实践
  • Rust常用库之序列化和反序列化库serde(使用 Serde 处理json)
  • java设计模式(2)---六大原则
  • 数学建模(层次分析法 python代码 案例)
  • Gitlab介绍
  • Amuse .NET application for stable diffusion
  • 【机器学习-05】模型的评估与选择
  • 【11】工程化
  • Python中requests、aiohttp、httpx性能对比
  • 网络原理(5)——IP协议(网络层)
  • GE IS200AEPAH1BKE IS215WEPAH2BB是两种不同的压力测量模块
  • Rust 与 C++ ,孰优孰劣?
  • MySQL、Oracle的时间类型字段自动更新:insert插入、update更新时,自动更新时间戳
  • Testng框架集成新业务
  • springboot 单元测试
  • LeetCode---126双周赛
  • [python] ETL 工作流程 Prefect
  • html第一次作业
  • 基于java实现的KTV点歌系统
  • GPT+向量数据库+Function calling=垂直领域小助手
  • DeepSeek-coder 微调训练记录
  • 【Android】【Bluetooth Stack】蓝牙音乐协议分析之音频控制与信息加载(超详细)
  • ChatGPT无法登录,提示我们检测到可疑的登录行为?如何解决?
  • 程序员表白
  • CSS的使用与方法
  • (保姆级)离线安装mongoDB集群
  • 面试笔记——MySQL(主从同步原理、分库分表)
  • 面试题2.0
  • 【剑指offer】53. 最小的k个数(java选手)(优先队列+快排+快速选择)
  • 带有GUI界面的电机故障诊断(MSCNN-BILSTM-ATTENTION模型,TensorFlow框架,有中文注释,带有六种结果可视化)