현업에서 유지보수 업무를 하다가
고객사로부터 4만건이 넘는 데이터를 엑셀로 다운받을 때
6분 30초 정도 걸리는 등의 이유로 업무에 지장이 간다는 민원을 접수했다.
엑셀로 데이터를 불러올 때 결국 select 쿼리문을 쓰므로, 쿼리문만 수정하면 될 것 같았다.
우선, 3개월 단위로 조회하면 더 빨라지지 않을까 하여 'BETWEEN 조건'을 걸었다.
6분 30초에서 2분 30초로 단축되었다.
데이터를 일부만 조회하니 시간이 자연스럽게 단축될 수 밖에 없었다.
하지만, 여기서 더 줄일 수 없을까 고민했고, 회사 선임님께 도움을 구했다.
그리고 서브쿼리문 하나만 수정했더니
2분 30초에서 20초로 단축되었다.
여기서부터 이 포스팅에서 공유하고 싶은 이야기이다.
무려 약 2분을 단축했던 방법이다.
간단하게 말해, 서브 쿼리문은 SELECT 문을 단순 CASE 문으로 변경하였더니 시간이 단축되었다.
상세설명
- 조회하는 테이블과 조인 관계가 BEFORE와 AFTER 모두 같다.
- 그런데 BEFORE에는 서브 쿼리문에서 이미 FROM 으로 가져온 TABLE_2를 재사용한다.
- 단순 CASE문으로 바꾸고, TABLE_2에서 바로 원하는 examplecd 값을 가져온다. 즉, B.examplecd로 바꾼다.
BEFORE)
SELECT
A.COL1,
A.COL2,
A.COL3,
A.COL4,
A.COL5,
A.COL6,
A.COL7,
A.COL8,
, (
SELECT
CASE
when examplecd = '001' then 'RESULT_A'
when examplecd = '002' then 'RESULT_B'
when examplecd = '003' then 'RESULT_C'
when examplecd = '004' then 'RESULT_D'
when examplecd = '005' then 'RESULT_E'
when examplecd = '006' then 'RESULT_F'
when examplecd = '007' then 'RESULT_G'
when examplecd = '008' then 'RESULT_H'
when examplecd = '009' then 'RESULT_I'
when examplecd = '010' then 'RESULT_J'
when examplecd = '011' then 'RESULT_K'
when examplecd = '012' then 'RESULT_L'
when examplecd = '013' then 'RESULT_M'
when examplecd = '014' then 'RESULT_N'
when examplecd = '015' then 'RESULT_0'
when examplecd = '016' then 'RESULT_P'
END
FROM TABLE_2 WHERE COL1 = A.COL1
) as RESULT_NAME
FROM TABLE_1 A, TABLE_2 B, TABLE_3 C
WHERE A.COL2 = B.COL2 AND B.COL_3 = C.COL_3
AFTER)
단순 CASE 문으로 trimming.
SELECT
A.COL1,
A.COL2,
A.COL3,
A.COL4,
A.COL5,
A.COL6,
A.COL7,
A.COL8,
,
CASE
when B.examplecd = '001' then 'RESULT_A'
when B.examplecd = '002' then 'RESULT_B'
when B.examplecd = '003' then 'RESULT_C'
when B.examplecd = '004' then 'RESULT_D'
when B.examplecd = '005' then 'RESULT_E'
when B.examplecd = '006' then 'RESULT_F'
when B.examplecd = '007' then 'RESULT_G'
when B.examplecd = '008' then 'RESULT_H'
when B.examplecd = '009' then 'RESULT_I'
when B.examplecd = '010' then 'RESULT_J'
when B.examplecd = '011' then 'RESULT_K'
when B.examplecd = '012' then 'RESULT_L'
when B.examplecd = '013' then 'RESULT_M'
when B.examplecd = '014' then 'RESULT_N'
when B.examplecd = '015' then 'RESULT_0'
when B.examplecd = '016' then 'RESULT_P' END as RESULT_NAME
FROM TABLE_1 A, TABLE_2 B, TABLE_3 C
WHERE A.COL2 = B.COL2 AND B.COL_3 = C.COL_3
'01. Database' 카테고리의 다른 글
[xml] 오라클 CLOB 데이터 화면에 뿌려주기 (0) | 2024.06.27 |
---|---|
[iBatis 2.0] if-else 조건문 사용법 (0) | 2024.06.27 |
[Oracle/오라클] Left outer join과 Left join의 차이? (0) | 2024.06.19 |
[Oracle/오라클] 오라클 날아간 데이터/10분 전 데이터 조회 (0) | 2024.06.19 |
[SQL] 원하는 DB에 맞게 쿼리문 변환하기(feat. SQLines) (0) | 2024.06.19 |