Sql 有什么方法可以在Oracle 12C中增强下面的查询吗
无论如何,我们都可以在Oracle 12c中优化下面的查询,以获得更快的结果 TAB_C-是主表-2947109424计数,我们在TAB_Cact_id上有索引。但生产运行仍需3小时Sql 有什么方法可以在Oracle 12C中增强下面的查询吗,sql,oracle12c,Sql,Oracle12c,无论如何,我们都可以在Oracle 12c中优化下面的查询,以获得更快的结果 TAB_C-是主表-2947109424计数,我们在TAB_Cact_id上有索引。但生产运行仍需3小时 SELECT ta.email_addr_id , ta.email_addr , SUBSTR(ta.email_addr, INSTR(ta.email_addr, '@') + 1,
SELECT ta.email_addr_id
, ta.email_addr
, SUBSTR(ta.email_addr, INSTR(ta.email_addr, '@') + 1,
INSTR(ta.email_addr, '.', -1) - INSTR(ta.email_addr, '@')
- 1) AS email_domain
, mtr.max_email_response_date
, ta.add_date
, net.num_12mons
, net.num_3mons
, net.num_6mons
, net.num_9mons
, ta.hard_bounce_ind
, ta.email_addr_text_att_02 AS preference_birth_date
,ta.source AS source
FROM Tab_A ta
LEFT JOIN (
SELECT tr.email_addr_id
, tcX(tr.email_response_date) AS max_email_response_date
FROM Tab_B tr
where tr.email_response_date = 'NEW'
AND tr.update_source <> 'EXP_EVENT'
GROUP BY tr.email_addr_id
) mtr
ON ta.email_addr_id = mtr.email_addr_id
LEFT JOIN (
SELECT tc.email_addr_id
, COUNT(DISTINCT tc.m_act_id) AS num_12mons
, COUNT(DISTINCT CASE WHEN ROUND(tc.outbound_date, 'DD')
> (ROUND(sysdate, 'DD') - 90)
THEN tc.m_act_id ELSE NULL END) AS num_3mons
, COUNT(DISTINCT CASE WHEN ROUND(tc.outbound_date, 'DD')
> (ROUND(sysdate, 'DD') - 180)
THEN tc.m_act_id ELSE NULL END) AS num_6mons
, COUNT(DISTINCT CASE WHEN ROUND(tc.outbound_date, 'DD')
> (ROUND(sysdate, 'DD') - 270)
THEN tc.m_act_id ELSE NULL END) AS num_9mons
FROM Tab_C tc
INNtr JOIN act a
ON tc.act_id = a.act_id
where a.channel_code IN ('FM','RM')
AND ROUND(tc.outbound_date, 'DD') > (ROUND(sysdate, 'DD') - 365)
GROUP BY tc.email_addr_id
) net
ON ta.email_addr_id = net.email_addr_id
where ta.email_addr_id <> 0 ;
如果您有任何见解,我们将不胜感激。-2947109424-为什么您的计数值为负值?发布您的查询执行计划。这不是负值TAB_C-计数值-2947109424没有查询计划,我们就走不了多远。话虽如此,该指数很可能没有多大用处。在Tab_C和act on act_id之间有一个内部连接,它将30亿行Tab_C与?一排排的表演。索引唯一有帮助的时候是act只有很少的行。在某些情况下,许多索引访问将比完整表扫描和哈希连接更昂贵。发布计划。我们是否可以在不使用DISTINCT函数的情况下以任何替代方式重新编写“DISTINCT”列,因为DISTINCT使查询速度非常慢。