오라클 성능 개선 (190510)
스칼라 서브쿼리는 성능이 떨어진다.
왜냐하면 스칼라 서브쿼리도 상관 서브 쿼리에 속하므로
지속해서 메인 쿼리문의 SYSTEM S를 방문한다.
FROM 절에 서브 쿼리 (인라인 뷰) 를 생성하여 성능을 개선할 수 있었다.
<결과>
// @ \\\\\ 경로 \ TEST.sql
// DDL
CREATE TABLE SYSTEM( SYSTEM_ID VARCHAR2(5),
SYSTEM_NAME VARCHAR2(20)
);
INSERT INTO SYSTEM VALUES('XXX','혜화DB');
INSERT INTO SYSTEM VALUES('YYY','강남DB');
INSERT INTO SYSTEM VALUES('ZZZ','영등포DB');
CREATE TABLE RESOURCE_USAGE(SYSTEM_ID VARCHAR2(5),
RESOURCE_NAME VARCHAR2(10)
);
INSERT INTO RESOURCE_USAGE VALUES('XXX','FTP');
INSERT INTO RESOURCE_USAGE VALUES('YYY','FTP');
INSERT INTO RESOURCE_USAGE VALUES('YYY','TELNET');
INSERT INTO RESOURCE_USAGE VALUES('YYY','EMAIL');
COMMIT;
// QUERY
SELECT SYSTEM_ID, SYSTEM_NAME,
DECODE(COUNT(FTP_CNT), 1,'사용','미사용') AS FTP,
DECODE(COUNT(TELNET_CNT), 1,'사용','미사용') AS TELNET,
DECODE(COUNT(EMAIL_CNT), 1,'사용','미사용') AS EMAIL
FROM (
SELECT S.SYSTEM_ID, S.SYSTEM_NAME, R.RESOURCE_NAME,
DECODE(RESOURCE_NAME, 'FTP',1) AS FTP_CNT,
DECODE(RESOURCE_NAME, 'TELNET',1) AS TELNET_CNT,
DECODE(RESOURCE_NAME, 'EMAIL',1) AS EMAIL_CNT
FROM SYSTEM S, RESOURCE_USAGE R
WHERE S.SYSTEM_ID = R.SYSTEM_ID(+)
)
GROUP BY SYSTEM_ID, SYSTEM_NAME
ORDER BY SYSTEM_ID;