Reputation: 5
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;
I have an sql query where it displays sum of the QUANTITYs which were grouped by the year. The issue is it takes up around 25 minutes to fetch the rows.
Those tables contain around 20,000 records.
I tried to create an index on each of the column but it did not work.
How can I speed up the query where it can fetch the records and display the sum in a very short amount of time???
Below is a sample SQL Fiddle
https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=e220908a49c0dc8ac61388aa1b241ea4
Tried this way too
FROM SIEM_DETAILS SA
JOIN REAP_DETAILS CD
ON CD.ENTRY_ID = SA.ENTRY_ID
GROUP BY SA.YEAR;
But the time to display result is slow
Upvotes: 0
Views: 362
Reputation: 8655
Shouldn't it contain a join condition there? Like:
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;
Update: There is also another approach: to use manual group-by-placement transformation:
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
(
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;
I'm not sure if your REAP_DETAILS has YEAR column. If yes, you need to add this column into cd
inline view like:
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
(
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
YEAR,ENTRY_ID
sum(QUANTITY5) QUANTITY5,
sum(QUANTITY6) QUANTITY6,
sum(QUANTITY7) QUANTITY7,
sum(QUANTITY8) QUANTITY8
from REAP_DETAILS
group by YEAR,ENTRY_ID
) cd
WHERE sa.ENTRY_ID=cd.ENTRY_ID
GROUP BY SA.YEAR;
Upvotes: 1