Попытка выяснить, почему этот запрос SQL занимает 47 минут, чтобы выполнить - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь сделать запрос SQL, но этот запрос занимает вечность, чтобы закончить. Запрос выполняется в Excel 2003 с VBA.

Размер СТОЛА:

  • TABLE1 = 12600 Строка
  • TABLE2 = 361K Строка

Вот запрос:

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:

Execution plan

Как я мог ускорить этот запрос? Требуется 47 минут, чтобы закончить

Ответы [ 3 ]

1 голос
/ 09 апреля 2019

Попробуйте определить 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
0 голосов
/ 10 апреля 2019

С кодом от 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

Как мне этого добиться?

0 голосов
/ 09 апреля 2019

Я добавил GROUP BY y.code, y.name, y.IS_BILAN, y.inactive в конце, и это работает

  • время выполнения 47 сек.

Это довольно быстро, но мне интересно, есть ли способ получить строку с count = 0, потому что в этом запросе пропущена строка 3k

...