【GP学习笔记二补充】 查询优化器消除外连接

本文探讨了为何在数据库查询中要消除外连接,以及在Greenplum中如何实现这一过程。通过将外连接转换为内连接、SEMI JOIN和ANTI JOIN,可以减小结果集大小,便于查询优化器找到更优的查询计划。文中举例说明了LEFT JOIN如何转换为INNER JOIN或ANTI JOIN,并介绍了Greenplum的两阶段消除外连接策略。
摘要由CSDN通过智能技术生成

一、连接类型

这个应该不用多介绍,简单列举下

  • 内连接: INNER JOIN
  • 外连接: LEFT [OUTER] JOIN 、RIGHT [OUTER] JOIN、FULL [OUTER] JOIN

除此之外,GP还引入了三种特殊连接,用于提升子链接时使用

  • SEMI JOIN:类似于IN的效果
  • ANTI JOIN: 可以看成是LEFT JOIN的结果去除INNER JOIN的结果之后得到的结果
  • JOIN_LASJ_NOTIN:用于NOT IN子链接提取

与外连接相比,SEMI JOIN和ANTI JOIN输出的结果集较少,对连接运算的结合律支持与内连接类似,更便于查询优化器的处理。

二、为什么要消除外连接

  • 结果集更小
  • 便于查询优化器优化,比如多个内连接可以改变连接顺序,寻找更好的查询计划,而非内连接不能随便交换连接顺序

如果能够将外连接转换为内连接,可以让优化器在查询优化的后续步骤更好的基于代价选择更优的连接顺序 。

三、如何消除外连接

  1. 试图将半外连接转换成内连接
  2. 试图将全外连接转换成办外连接或内连接
  3. 试图将LEFT JOIN转换成ANTI JOIN

3.1 外转内

先看一个简单连接查询

A LEFT JOIN B ON A.id = B.id WHERE B.id > 0

分析一下:

这个左外连接可以拆解成两部分

    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值