我正在尝试发出SQL请求,但该请求要花很长时间才能完成。该请求是在带有VBA的Excel 2003中完成的。
表的大小:
以下是查询:
SELECT DISTINCT
y.code AS CODE,
y.name AS LIBELLE,
#[...]
#[...]
#[...]
#[...]
y.IS_BILAN,
y.INACTIVE,
(SELECT COUNT(1)
FROM TABLE1 d, TABLE2 a
WHERE a.record_date_time >= '2018/01/01'
AND a.record_date_time < '2019/01/01'
AND global_status <> 'C'
AND a.id = d.id
AND d.type_id = y.code) AS TOTAL_2018
FROM
anal_exam y
ORDER BY
code
删除最后一部分“ SELECT COUNT(1)”时,整个查询会立即运行
我在Oracle SQL Developer中看到的执行计划:
如何加快此查询的速度?完成需要47分钟
答案 0 :(得分:1)
尝试像这样定义您的JOIN
:
SELECT DISTINCT
y.code AS CODE,
y.name AS LIBELLE,
y.IS_BILAN,
y.INACTIVE,
COUNT(*) AS TOTAL_2018
FROM anal_exam y
JOIN TABLE1 d
ON d.type_id = y.code
JOIN TABLE2 a
ON d.ID = a.ID
WHERE a.record_date_time BETWEEN '2018/01/01' AND '2019/01/01'
AND global_status <> 'C'
order by code
答案 1 :(得分:0)
我在末尾添加了GROUP BY y.code, y.name, y.IS_BILAN, y.inactive
,它可以正常工作
这是非常快的,但我想知道是否有一种方法来获取count = 0的行,因为此查询中省略了3k行
答案 2 :(得分:0)
使用T McKeown的代码,我得到以下结果:
CODE1|LIBELLE1|T|T|1530
CODE3|LIBELLE2|T|T|20
CODE5|LIBELLE3|T|T|143
我要搜索的结果包括带有count()= 0的行
CODE1|LIBELLE1|T|T|1530
CODE2|LIBELLE2|T|F|0
CODE3|LIBELLE2|T|F|20
CODE4|LIBELLE4|T|T|0
CODE5|LIBELLE3|F|T|143
我该如何实现?