【SQL 优化器技术系列】 连接顺序(Join Order)

Oracle 2005 年出了一个 30 多页的小册子,《Query Optimization in Oracle Database10g Release 2》,介绍了常见的优化器技术。

我是做 SQL 执行的,优化部分只了解皮毛,从没有系统学习过。本系列逐个学习和介绍,自我提升,也帮助他人。

这一节聊连接顺序。我们不会讲怎么去决策连接顺序,会讲做好连接顺序的决策有多难:

  • N 表 join 时,表的连接顺序有 N! 种组合,N=5时,N!= 120
  • 每种 join 可以选择多种连接算法,如 NLJ、HJ、MJ,PWJ 等等
  • 每张表还要决策是否走索引,最多 2^N 种组合

这几样算下来,N=5 时大约有 32 * 10 * 120 ~= 3w 种路径选择。计算 3w 种组合的代价,代价非常昂贵。

通常来说,5 表 join 实际只会产生一个非常有限的 access path,详细多少依赖于各个系统的实现。优化器模块很大一部分精力就是来优化 access path 计算,这是一个数学上有解但工程上复杂的问题。不过,也没有什么黑魔法,动态规划而已。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值