sql提取时间较慢,加快了查询速度

问题描述

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;

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...