leading hint指定多表关联顺序不生效

为何用leading指定关联顺序时,无法生效,同样的强制使用索引又是可以生效的,看warnings也不知道具体哪里有问题。但是如果把表关联的顺序变一下,它自己关联顺序是会变,说明应该是可以调整的,但是不知道leading为何不生效,是对外连接有限制吗?


不强制使用索引 试过走索引吗

强制走索引只是我为了测试不是别的环境问题导致无法用hint,这里不用hint肯定不走索引哈。这几个都是空表其实。

LEADING hint 在以下情况下会失效:

  • 指定了多个 LEADING hint
  • LEADING hint 中指定的表名不存在
  • LEADING hint 中指定了重复的表名
  • 优化器无法按照 LEADING hint 指定的顺序进行表连接
  • 已经存在 straight_join() hint
  • 查询语句中包含 outer join
  • 和选择 join 算法的 hint(即 MERGE_JOININL_JOININL_HASH_JOINHASH_JOIN)同时使用时

当出现了上述失效的情况,会输出 warning 警告。

优化器可能认为其他顺序更优,因此选择了不同的关联顺序

使用外连接时,连接顺序取决于你外连接的顺序,leading无法指定。

我的是6.5.1版本了,文档里写的是“ 查询语句中包含 outer join 且同时指定了包含笛卡尔积的情况”才会失效,难道这个其实没修复?

我的是6.5.1版本,6.5以上的文档里写的是“ *查询语句中包含 outer join 且同时指定了包含笛卡尔积的情况”才会无效

我在6.6版本测试,也不生效

left join不应该是按照写的顺序做关联吗?

我在 7.1 版本测试 leading 可以生效

3 个赞

谢谢,确实是这个参数导致的,从6.1升级上来的,原来是off,现在改成on就可以了

但这个是测试环境理想状态,实际我在生产中,关联的表比较多时,还是不起作用,最后还是要按想要的顺序排好,再用STRAIGHT_JOIN()来固定顺序

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。