1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | select sum (decode(code2, '01' , 3500, '02' , 3500, '03' , 3500, 0)) a, sum (decode(code2, '04' , 6000, '05' , 6000, '06' , 6000, 0)) b from ( select ( select code2 from table2 where code = t1.code1) code2 from ( select code1 from table1 where model = '1111' and type = '1' ) t1 ); 어떠한 테이블의 데이터를 가지고 와 금액을 계산하는 쿼리를 위와 같이 짰습니다... 안쪽의 select 구문에서는 속도가 빨리 나오는데... sum (decode... 구문까지 함께 실행하면 쿼리의 속도가 엄청 느려지는 문제가 있습니다. 대략.... table1 테이블은 데이터가 250만건, table2는 그 4배 이상의 데이터가 있는 테이블입니다. 인덱스는 타고 있는데... 조회가 1분 30초 정도 걸립니다... 왜 이렇게 느린걸까요.. 고수님의 답변 기다리겠습니다~ ㅠ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | -- 음... 질문에 답이 없으시네요? 바쁘신가? 일단 쿼리 올려봅니다. -- 1. Group By 를 통해 중복을 제거하여 조인 부하 줄이기 -- 2. Group By code2 중간집합을 이용하여 Decode 사용 부하 줄이기 -- 3. 위 1,2 번을 수행하기 위해 Sum 방식을 Count 방식으로 변경 SELECT SUM ( CASE WHEN code2 IN ( '01' , '02' , '03' ) THEN cnt ELSE 0 END ) * 3500 a , SUM ( CASE WHEN code2 IN ( '04' , '05' , '06' ) THEN cnt ELSE 0 END ) * 6000 b FROM ( SELECT b.code2 , SUM (a.cnt) cnt FROM ( SELECT code1 , COUNT (*) cnt FROM table1 WHERE model = '1111' AND type = '1' GROUP BY code1 ) a , table2 b WHERE a.code1 = b.code GROUP BY b.code2 ) ; |