首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在同一个表上的左连接-耗时太长

在同一个表上的左连接-耗时太长
EN

Stack Overflow用户
提问于 2017-07-22 14:42:33
回答 2查看 214关注 0票数 0

这个查询需要6-7个小时,有什么方法可以提高性能吗?

代码语言:javascript
复制
SELECT  
    SUM(INV1.cur_book_bal),
    SUM(inv2.cur_book_bal),
    SUM(INV3.CUR_BOOK_BAL),
    SUM(INV4.CUR_BOOK_BAL)  
FROM
    table1 inv1 
LEFT JOIN
    table1 inv2 ON inv1.CIF_KEY = inv2.CIF_KEY
LEFT JOIN
    table1 inv3 ON inv1.CIF_KEY = inv3.CIF_KEY
LEFT JOIN
    table1 inv4 ON inv1.CIF_KEY = inv4.cif_key
                AND inv1.date = '30-JUN-2014' 
                AND inv2.date = '30-juN-2015' 
                AND INV3.dATE = '30-JUNE-2016' 
                AND INV4.DATE = '30-JUNE-17'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-22 15:09:06

尝试在进行连接之前过滤数据,如下所示:

代码语言:javascript
复制
with TABLE_DATA as    
(    
select  CIF_KEY ,date, sum(cur_book_bal)cur_book_bal from table1  where Date in ('30-JUN-2014','30-juN-2015','30-JUNE-2016','30-JUNE-17')    
group by CIF_KEY,date    
)    
SELECT  INV1.cur_book_bal ,inv2.cur_book_bal,INV3.CUR_BOOK_BAL,INV4.CUR_BOOK_BAL      
from TABLE_DATA inv1     
left  join TABLE_DATA inv2    
on inv1.CIF_KEY= inv2.CIF_KEY    
left join TABLE_DATA inv3    
on inv1.CIF_KEY= inv3.CIF_KEY    
left  join TABLE_DATA inv4    
on inv1.CIF_KEY= inv4.cif_key    

where inv1.date = '30-JUN-2014' and inv2.date = '30-juN-2015' AND INV3.dATE = '30-JUNE-2016' AND INV4.DATE = '30-JUNE-17'
票数 0
EN

Stack Overflow用户

发布于 2017-07-22 18:56:05

编写此查询的最佳方法是使用条件聚合。我很确定这会得到你想要的结果:

代码语言:javascript
复制
SELECT SUM(CASE WHEN date = '2014-06-30' THEN curr_book_bal else 0 end),
       SUM(CASE WHEN date = '2015-06-30' THEN curr_book_bal else 0 end),
       SUM(CASE WHEN date = '2016-06-30' THEN curr_book_bal else 0 end),
       SUM(CASE WHEN date = '2017-06-30' THEN curr_book_bal else 0 end),
FROM table1 inv1 
WHERE date in ('2014-06-30', '2015-06-30', '2016-06-30', '2017-06-30');

有了table1(date, curr_book_bal)上的索引,这应该既快又准确。

请注意标准日期格式的使用。在查询中编写日期常量时,强烈建议您这样做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45251568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档