为何用leading指定关联顺序时,无法生效,同样的强制使用索引又是可以生效的,看warnings也不知道具体哪里有问题。但是如果把表关联的顺序变一下,它自己关联顺序是会变,说明应该是可以调整的,但是不知道leading为何不生效,是对外连接有限制吗?
不强制使用索引 试过走索引吗
强制走索引只是我为了测试不是别的环境问题导致无法用hint,这里不用hint肯定不走索引哈。这几个都是空表其实。
LEADING
hint 在以下情况下会失效:
- 指定了多个
LEADING
hint -
LEADING
hint 中指定的表名不存在 -
LEADING
hint 中指定了重复的表名 - 优化器无法按照
LEADING
hint 指定的顺序进行表连接 - 已经存在
straight_join()
hint - 查询语句中包含 outer join
- 和选择 join 算法的 hint(即
MERGE_JOIN
、INL_JOIN
、INL_HASH_JOIN
、HASH_JOIN
)同时使用时
当出现了上述失效的情况,会输出 warning 警告。
优化器可能认为其他顺序更优,因此选择了不同的关联顺序
使用外连接时,连接顺序取决于你外连接的顺序,leading无法指定。
我的是6.5.1版本,6.5以上的文档里写的是“ *查询语句中包含 outer join 且同时指定了包含笛卡尔积的情况”才会无效
我在6.6版本测试,也不生效
left join不应该是按照写的顺序做关联吗?
谢谢,确实是这个参数导致的,从6.1升级上来的,原来是off,现在改成on就可以了
但这个是测试环境理想状态,实际我在生产中,关联的表比较多时,还是不起作用,最后还是要按想要的顺序排好,再用STRAIGHT_JOIN()来固定顺序
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。