oracle 连接中附加“on”条件的顺序是否重要?

bqf10yzr  于 2022-11-22  发布在  Oracle
关注(0)|答案(1)|浏览(221)

我 正在 处理 两 个 表 的 联接 , 希望 在 多 个 条件 下 进行 联接 , 但 我 想 知道 条件 的 顺序 是否 重要 。 示例 如下 :

SELECT * 
FROM Table_A A 
LEFT JOIN Table_B B
ON A.feature1 = B.Feature1
    AND A.feature2 = B.Feature2
    AND A.feature3 = B.Feature3
    AND A.feature4 = B.Feature4

中 的 每 一 个
如果 " A . featureX = B . featureX " 的 顺序 不同 , 上面 的 查询 结果 是否 相同 ? 预先 感谢 !
我 尝试 过 更改 顺序 , 希望 看到 一些 不同 , 但 至少 在 我 使用 的 表 中 , 我 没有 看到 任何 更改 。

r1zk6ea1

r1zk6ea11#

理想 情况 下 , 连接 条件 的 顺序 和 predicate 的 顺序 是 无关 的 。
在 实践 中 ,在 连接 两 个 表 的 绝 大多 数 情况 下 , 这 可能 是 正确 的 。 但是 , 连接 的 表 越 多 , 优化 器 生成 查询 计划 的 选项 越 多 , 这种 情况 就 越 不 正确 。 优化 器 必须 在 几 毫秒 内 生成 一 个 计划 , 但 可能 的 计划 数量 随 所 涉及 的 表 数量 呈 指数 级 增长这 意味 着 优化 器 必须 使用 各种 试探 法 来 确定 哪些 计划 树 需要 修剪 , 哪些 计划 树 需要 探索 ,将 探索 由于 首先 考虑 某些 连接 条件 或 predicate 而 首先 找到 计划 树如果 您 正在 构建 一 个 连接 17 个 表 并且 具有 一 堆 可以 由 不同 索引 满足 的 predicate 的 大型 查询 ,更改 表 的 顺序 、 predicate 的 顺序 或 连接 条件 的 顺序 很 可能 会 产生 不同 的 查询 计划 。

相关问题