여러 조인 및 하위 쿼리가있는 테이블에서 요약 SQL을 개선하는 방법은 무엇입니까?

앤디

지난 1 일, 지난 7 일, 지난 30 일 및 ID 당 모든 시간에 대한 결과를 요약하는 쿼리가 있습니다. 내가 가진 쿼리는 작동하지만 예상했던 것보다 느립니다.

이것은 내가 실행중인 쿼리입니다.

SELECT 
  v.id,
  v.dtt,
  v.date_hours as day_date_hours,
  w.date_hours as week_date_hours,
  m.date_hours as month_date_hours,
  t.date_hours as total_date_hours

FROM example v
LEFT JOIN (SELECT id, sum(date_hours) as date_hours from example WHERE dtt > sysdate-7 group by id) w
  ON w.id = v.id
LEFT JOIN (SELECT id, sum(date_hours) as date_hours from example WHERE dtt > sysdate-30 group by id) m
  ON m.id = v.id
LEFT JOIN (SELECT id, sum(date_hours) as date_hours from example group by id) t
  ON t.id = v.id
WHERE
  dtt = '20-AUG-2014'
GROUP BY v.id, v.dtt, v.date_hours,  w.date_hours, m.date_hours, t.date_hours
order by v.id 

출력 요약입니다.

+-----+--------------------------------+-----------------+------------------+-------------------+------------------+
| ID  |              DTT               | DAY_DATE_HOURS  | WEEK_DATE_HOURS  | MONTH_DATE_HOURS  | TOTAL_DATE_HOURS |
+-----+--------------------------------+-----------------+------------------+-------------------+------------------+
|  1  | August, 20 2014 00:00:00+0000  | 18.5            | 111.65           | 415.25            | 444.75           |
|  2  | August, 20 2014 00:00:00+0000  | 10.5            | 116.65           | 451.55            | 475.05           |
+-----+--------------------------------+-----------------+------------------+-------------------+------------------+

질문에 대한이 샘플과 달리 몇 가지 참고 사항 example은 실제로 입니다. 나는보기를 통제하지 않는다. 내가 제공 한보기이지만 example테이블 과 똑같 습니다. 다음과 같은 정의가 있습니다.

CREATE TABLE example (
        id varchar(15),
        dtt DATE,
        date_hours NUMBER
);

보기에는 약 1000 개의 고유 ID에 걸쳐 약 20 만 개의 레코드가 포함됩니다. 내 쿼리를 실행하는 데 약 8 분이 걸립니다.

내 문제는 내 JOIN에서 3 개의 하위 쿼리를 수행하고 있다는 것입니다. 이러한 직감에도 불구하고 이러한 요약 통계를 수집하는 더 효율적인 방법이 있는지 (또는 있는지) 잘 모르겠습니다. 8 분 실행 시간에 전체 테이블을 선택하고 애플리케이션의 모든 계산을 더 빠르게 수행 할 수있었습니다. 차라리 이것을하지 않을 것입니다.

SQLFiddle 에서 내 테이블 및 쿼리의 샘플 세트에 대한 링크를 사용할 수 있습니다.

쿼리를 더 효율적으로 만들면서 동일한 결과 집합을 유지하려면 어떻게해야합니까?

고든 리노 프

조건부 집계를 사용하여 요약을 한 번만 수행하십시오.

SELECT v.id, v.dtt, v.date_hours as day_date_hours,
       h.week_date_hours, h.month_date_hours, h.total_date_hours
FROM example v LEFT JOIN
     (SELECT id,
             sum(case when dtt > sysdate-7 then date_hours end) as week_date_hours,
             sum(case when dtt > sysdate-30 then date_hours end) as month_date_hours,
             sum(date_hours) as total_date_hours
      from example
      group by id
     ) h
     ON h.id = v.id
WHERE dtt = DATE '2014-08-20'
order by v.id ;

나는 겉옷 group by이 필요 하다고 생각하지 않습니다 . 그렇다면 select distinct.

편집하다:

또한 분석 함수를 사용하여 이것을 작성할 수 있다고 생각합니다.

SELECT v.*
FROM (SELECT v.id, v.dtt, v.date_hours as day_date_hours,
             sum(case when dtt > sysdate-7 then date_hours end) over (partition by v.id) as week_date_hours,
             sum(case when dtt > sysdate-30 then date_hours end) over (partition by v.id) as month_date_hours,
             sum(date_hours) over (partition by v.id) as total_date_hours
      FROM example v 
     ) v
WHERE dtt = DATE '2014-08-20'
order by v.id ;

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Codeigniter에서 조건부없이 여러 테이블 조인을 선택하는 방법은 무엇입니까?

분류에서Dev

SQL에서 여러 조건으로 테이블을 조인하는 방법은 무엇입니까?

분류에서Dev

SQL에서 여러 조건으로 테이블을 조인하는 방법은 무엇입니까?

분류에서Dev

테이블을 조인하고 laravel에서 여러 값을 반환하는 방법은 무엇입니까?

분류에서Dev

SQL에서 jon을 사용하여 두 테이블을 조인하는 방법은 무엇입니까?

분류에서Dev

여러 테이블에 고유 한 제약 조건을 적용하는 방법은 무엇입니까?

분류에서Dev

jquery 및 webservice를 사용하여 SQL에 의해 바인딩되는 html 테이블에서 선택한 행을 얻는 방법은 무엇입니까?

분류에서Dev

3 개의 테이블에서 SQL로 두 개의 쿼리를 조인하는 방법은 무엇입니까?

분류에서Dev

여러 범위와의 연결을 통해 has_many에서 동일한 테이블의 여러 조인을 제거하는 방법은 무엇입니까?

분류에서Dev

여러 테이블을 조인하는 쿼리에서 MySQL "Order By Limit 1"을 최적화하는 방법은 무엇입니까?

분류에서Dev

동일한 테이블에서 여러 조인을 수행 한 다음 다른 테이블과 조인하는 방법은 무엇입니까?

분류에서Dev

내 SQL에서 여러 열로 세 테이블에 대한 쿼리를 조인하는 방법은 무엇입니까?

분류에서Dev

SQL 조인 및 MS 액세스-여러 테이블을 하나로 결합하는 방법은 무엇입니까?

분류에서Dev

조인 된 테이블의 열을 요약하는 방법은 무엇입니까?

분류에서Dev

복잡한 쿼리에서 linq를 사용하여 테이블을 다른 두 테이블에 조인하는 방법은 무엇입니까?

분류에서Dev

C #에서 SQL Server 테이블에 대한 제약 조건을 수정하는 방법은 무엇입니까?

분류에서Dev

여러 열이있는 조인 된 테이블에서 검색하는 방법은 무엇입니까?

분류에서Dev

SQL에서 3 개 이상의 테이블을 조인하는 방법은 무엇입니까?

분류에서Dev

SQL에서 3 개 이상의 테이블을 조인하는 방법은 무엇입니까?

분류에서Dev

여러 인수를 허용하는 Javascript 에서이 기능을 개선하는 방법은 무엇입니까?

분류에서Dev

SQL :이 쿼리에서 열을 선택하고 요약하는 방법은 무엇입니까?

분류에서Dev

SQL에서 3 개의 테이블을 조인하여 행 수를 삽입하는 방법은 무엇입니까?

분류에서Dev

SQL 쿼리에 여러 AND 조건을 추가하는 방법은 무엇입니까?

분류에서Dev

두 개의 하위 쿼리를 사용하여 두 테이블에서 값을 가져 오는 방법은 무엇입니까? T-SQL

분류에서Dev

SQL에서 두 테이블을 비교하여 조건을 빼는 방법은 무엇입니까?

분류에서Dev

SQL 서버 쿼리에서 with 및 내부 조인을 사용하는 방법은 무엇입니까?

분류에서Dev

이와 같은 SQL 쿼리를 사용하여 백엔드에서 답변 및 질문 테이블을 검색하는 방법은 무엇입니까?

분류에서Dev

테이블 조인을 사용하여이 쿼리를 최적화하는 방법은 무엇입니까?

분류에서Dev

laravel에서 조인 쿼리와 함께 테이블에 값을 저장하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    Codeigniter에서 조건부없이 여러 테이블 조인을 선택하는 방법은 무엇입니까?

  2. 2

    SQL에서 여러 조건으로 테이블을 조인하는 방법은 무엇입니까?

  3. 3

    SQL에서 여러 조건으로 테이블을 조인하는 방법은 무엇입니까?

  4. 4

    테이블을 조인하고 laravel에서 여러 값을 반환하는 방법은 무엇입니까?

  5. 5

    SQL에서 jon을 사용하여 두 테이블을 조인하는 방법은 무엇입니까?

  6. 6

    여러 테이블에 고유 한 제약 조건을 적용하는 방법은 무엇입니까?

  7. 7

    jquery 및 webservice를 사용하여 SQL에 의해 바인딩되는 html 테이블에서 선택한 행을 얻는 방법은 무엇입니까?

  8. 8

    3 개의 테이블에서 SQL로 두 개의 쿼리를 조인하는 방법은 무엇입니까?

  9. 9

    여러 범위와의 연결을 통해 has_many에서 동일한 테이블의 여러 조인을 제거하는 방법은 무엇입니까?

  10. 10

    여러 테이블을 조인하는 쿼리에서 MySQL "Order By Limit 1"을 최적화하는 방법은 무엇입니까?

  11. 11

    동일한 테이블에서 여러 조인을 수행 한 다음 다른 테이블과 조인하는 방법은 무엇입니까?

  12. 12

    내 SQL에서 여러 열로 세 테이블에 대한 쿼리를 조인하는 방법은 무엇입니까?

  13. 13

    SQL 조인 및 MS 액세스-여러 테이블을 하나로 결합하는 방법은 무엇입니까?

  14. 14

    조인 된 테이블의 열을 요약하는 방법은 무엇입니까?

  15. 15

    복잡한 쿼리에서 linq를 사용하여 테이블을 다른 두 테이블에 조인하는 방법은 무엇입니까?

  16. 16

    C #에서 SQL Server 테이블에 대한 제약 조건을 수정하는 방법은 무엇입니까?

  17. 17

    여러 열이있는 조인 된 테이블에서 검색하는 방법은 무엇입니까?

  18. 18

    SQL에서 3 개 이상의 테이블을 조인하는 방법은 무엇입니까?

  19. 19

    SQL에서 3 개 이상의 테이블을 조인하는 방법은 무엇입니까?

  20. 20

    여러 인수를 허용하는 Javascript 에서이 기능을 개선하는 방법은 무엇입니까?

  21. 21

    SQL :이 쿼리에서 열을 선택하고 요약하는 방법은 무엇입니까?

  22. 22

    SQL에서 3 개의 테이블을 조인하여 행 수를 삽입하는 방법은 무엇입니까?

  23. 23

    SQL 쿼리에 여러 AND 조건을 추가하는 방법은 무엇입니까?

  24. 24

    두 개의 하위 쿼리를 사용하여 두 테이블에서 값을 가져 오는 방법은 무엇입니까? T-SQL

  25. 25

    SQL에서 두 테이블을 비교하여 조건을 빼는 방법은 무엇입니까?

  26. 26

    SQL 서버 쿼리에서 with 및 내부 조인을 사용하는 방법은 무엇입니까?

  27. 27

    이와 같은 SQL 쿼리를 사용하여 백엔드에서 답변 및 질문 테이블을 검색하는 방법은 무엇입니까?

  28. 28

    테이블 조인을 사용하여이 쿼리를 최적화하는 방법은 무엇입니까?

  29. 29

    laravel에서 조인 쿼리와 함께 테이블에 값을 저장하는 방법은 무엇입니까?

뜨겁다태그

보관