首页 > 解决方案 > 试图弄清楚为什么这个 SQL 请求需要 47 分钟才能执行

问题描述

我正在尝试发出 SQL 请求,但该请求需要永远完成。该请求是在 Excel 2003 中使用 VBA 完成的。

表的大小:

这是查询:

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 分钟

标签: sqlexcelvbaqsqlquery

解决方案


尝试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

推荐阅读