这是我的查询:
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之间加入.
我不明白为什么,因为每个表都有一个连接条件.
我通过添加 ORDERED 提示解决了这个问题:
select /*+ ordered */
Run Code Online (Sandbox Code Playgroud)
我从这里得到信息
如果您按照希望连接的顺序指定表并使用此提示,Oracle 不会花时间尝试找出最佳连接顺序,它只会按照 FROM 子句中的顺序连接它们。