我有一个查询,使4个表之间的联接。
匹配对表的基础表我输入PARAMS yeilds以下
TrialBal - 800万记录匹配的实体和pl_date
加入到ActDetail - 执行约85秒后,行数为8672175(与组,行数为1 ...现在)。 ActDetail将在内部联接返回零行。
加入到CalendarEngine - 只有60个在此表(pl_date和实体)的记录相配套,但是当这种被引入到SQL,查询只运行和运行。 对此有什么特别的原因?
CalendarEngine在我的查询不使用对实体综合指数和另外一个领域,所以我应该还是可以使用它?
为什么会加入之间TrailBal和ActDetail相对较快(大概是OUTER JOIN通过所有800万条记录针对ActDetail 168K的条目数量上运行),但加入了关于60个记录CalendarEngine导致看似无穷无尽的循环。
下面的SQL(我需要在最终的查询的注释字段)。 也试过更换或语句2外部联接
SELECT
ad.acct_lv2 AS IFRS_lvl2,
ad.acct_lv3 AS IFRS_lvl3,
ad.acct_lv4 AS IFRS_lvl4,
ad.acct_lv6 AS IFRS_lvl6,
--(CASE WHEN tb.pl_date = cal.curr_me_date THEN cal.date END) as Reporting_Cycle_This,
--(CASE WHEN tb.pl_date = cal.prev_me_date THEN cal.date END) as Reporting_Cycle_Last,
--(CASE WHEN tb.pl_date = cal.prev_me_date THEN cal.date END) as Reporting_Cycle_Previous,
null as Total,
null as Balance_default_dim,
null as Balance_proxy_dim,
0 as percentage_bal_proxy_applied,
'1 Table Data' as rowType
FROM TrialBal tb
INNER JOIN Partition p ON p.partition_code = tb.partition_code
AND p.entity = tb.entity
LEFT OUTER JOIN ActDetail ah ON tb.actNum = ad.actNum
AND tb.cpny = ad.cpny
AND tb.pl_date = ad.pl_date
AND ad.source = 'Ground0'
--LEFT OUTER JOIN CalendarEngine cal on tb.pl_date = cal.curr_me_date OR tb.pl_date = cal.prev_me_date
--AND tb.entity = cal.entity
WHERE tb.pl_date = '2014-04-30'
AND tb.entity = 'My_entity'
GROUP BY ad.acct_lv2, ad.acct_lv3, ad.acct_lv4, ad.acct_lv6, --tb.actNum, tb.cpny,
CASE WHEN tb.pl_date = cal.curr_me_date THEN cal.date END,
CASE WHEN tb.pl_date = cal.prev_me_date THEN cal.date END,
CASE WHEN tb.pl_date = cal.prev_me_date THEN cal.date END
也试图与2的外部联接更换或声明:
LEFT OUTER JOIN sCalendar cal_cur on tb.pnl_date = cal_cur.curr_me_date
AND tb.entity_code = cal_cur.entity_code
LEFT OUTER JOIN sCalendar cal_pre on tb.pnl_date = cal_pre.prev_me_date
AND tb.entity_code = cal_pre.entity_code