暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

利用Window Function解关联

芬芳 2023-06-21
249

前提条件
集群版本需为PolarDB MySQL版8.0版本且Revision version为8.0.2.2.1及以上。
概述
假设原有查询的通用表达形式如下:
image.png
其中,T1、T2、T3为一个或多个表和视图的集合;T2与T3之间的虚线表示子查询中的T2与主查询中的T3进行关联;T1出现在主查询中,但是不与子查询中的T2关联。
上图中通用表达式的关联子查询,具有以下约束条件:

  • Scalar subquery中没有limit,输出为Aggregation function,且没有distinct语法。
  • 子查询中的表必须是主查询中表的一部分。
  • 子查询中的关联条件必须是等值连接。主查询包含相同语义的连接条件,且包含有子查询中公共表的过滤条件。
  • 子查询中关联条件的列是主键或者唯一键。
  • 子查询和主查询都不带有自定义函数或者随机函数。
    利用Window Function将子查询解关联后的形式如下:
    image.png
    使用方法
  • 通过系统参数polar_optimizer_switch开启利用Window function解关联功能。取值范围如下:
    • unnest_use_window_function:利用Window function解关联的功能开关。
      • ON(默认值):开启利用Window function解关联功能。
      • OFF:关闭利用Window function解关联功能。
    • unnest_use_group_by:利用Group by解关联的功能开关,该查询变换受基于代价的查询变换控制。
      • ON(默认值):开启利用Group by解关联功能。
      • OFF:关闭利用Group by解关联功能。
    • derived_merge_cost_based:derived merge功能是否受基于代价的查询变换的控制。
      • ON:derived merge功能受基于代价的查询变换的控制。
      • OFF(默认值):derived merge功能不受基于代价的查询变换的控制。
  • 通过Hint来控制满足条件的子查询利用Window function解关联。
    通过UNNEST hint来控制该查询变换。具体变换形式如下:
UNNEST([@query_block_name] [strategy [, strategy] ...])   #表示使用Window function或Group By解关联,并且不受polar_optimizer_switch的影响。
NO_UNNEST([@query_block_name] [strategy [, strategy] ...])  #表示禁止使用Window function或Group By解关联,并且不受polar_optimizer_switch的影响。

其中,strategy支持WINDOW_FUNCTION和GROUP_BY选项。
相关文档
利用Window Function解关联示例

最后修改时间:2023-06-21 10:39:35
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论