问题描述
SELECT
SA.YEAR,sum(SA.QUANTITY1),sum(SA.QUANTITY2),sum(SA.QUANTITY3),sum(SA.QUANTITY4),sum(CD.QUANTITY5),sum(CD.QUANTITY6),sum(CD.QUANTITY7),sum(CD.QUANTITY8)
FROM SIEM_DETAILS SA,REAP_DETAILS CD
GROUP BY SA.YEAR;
我有一个sql查询,其中显示按年份分组的QUANTITY的总和。 问题在于,提取行大约需要25分钟。
这些表包含大约20,000条记录。
我尝试在每个列上创建一个索引,但是它不起作用。
如何加快查询的速度,使其可以在很短的时间内获取记录并显示总金额??
下面是一个示例SQL Fiddle
https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=e220908a49c0dc8ac61388aa1b241ea4
也尝试过这种方式
FROM SIEM_DETAILS SA
JOIN REAP_DETAILS CD
ON CD.ENTRY_ID = SA.ENTRY_ID
GROUP BY SA.YEAR;
但是显示结果的时间很慢
解决方法
这里不应该包含联接条件吗?喜欢:
SELECT
SA.YEAR,sum(SA.QUANTITY1),sum(SA.QUANTITY2),sum(SA.QUANTITY3),sum(SA.QUANTITY4),sum(CD.QUANTITY5),sum(CD.QUANTITY6),sum(CD.QUANTITY7),sum(CD.QUANTITY8)
FROM SIEM_DETAILS SA,REAP_DETAILS CD
WHERE sa.ENTRY_ID=cd.ENTRY_ID
GROUP BY SA.YEAR;
更新:还有另一种方法:使用手动的逐组转换:
SELECT
SA.YEAR,sum(CD.QUANTITY8)
FROM
(
select
YEAR,ENTRY_ID,sum(QUANTITY1) QUANTITY1,sum(QUANTITY2) QUANTITY2,sum(QUANTITY3) QUANTITY3,sum(QUANTITY4) QUANTITY4
FROM SIEM_DETAILS
group by YEAR,ENTRY_ID
) sa,(
select
ENTRY_ID
sum(QUANTITY5) QUANTITY5,sum(QUANTITY6) QUANTITY6,sum(QUANTITY7) QUANTITY7,sum(QUANTITY8) QUANTITY8
from REAP_DETAILS
group by ENTRY_ID
) cd
WHERE sa.ENTRY_ID=cd.ENTRY_ID
GROUP BY SA.YEAR;
我不确定您的REAP_DETAILS是否包含YEAR列。如果是,则需要将此列添加到cd
内联视图中,例如:
SELECT
SA.YEAR,(
select
YEAR,ENTRY_ID
sum(QUANTITY5) QUANTITY5,sum(QUANTITY8) QUANTITY8
from REAP_DETAILS
group by YEAR,ENTRY_ID
) cd
WHERE sa.ENTRY_ID=cd.ENTRY_ID
GROUP BY SA.YEAR;