为什么此查询会导致Oracle中的MERGE JOIN CARTESIAN?

Mar*_*tta 6 oracle

这是我的查询:

select count(*)
from email_prod_junc j
inner join trckd_prod t5 on j.trckd_prod_sk = t5.trckd_prod_sk
inner join prod_brnd b on t5.prod_brnd_sk = b.prod_brnd_sk
inner join email e on j.email_sk = e.email_sk
inner join dm_geography_sales_pos_uniq u on (u.emp_sk = e.emp_sk and u.prod_brnd_sk = b.prod_brnd_sk)
Run Code Online (Sandbox Code Playgroud)

解释计划说:

笛卡尔在DM_GEOGRAPHY_SALES_POS_UNIQ和EMAIL_PROD_JUNC之间加入.

我不明白为什么,因为每个表都有一个连接条件.

Mar*_*tta 3

我通过添加 ORDERED 提示解决了这个问题:

select /*+ ordered */
Run Code Online (Sandbox Code Playgroud)

我从这里得到信息

如果您按照希望连接的顺序指定表并使用此提示,Oracle 不会花时间尝试找出最佳连接顺序,它只会按照 FROM 子句中的顺序连接它们。