데이터베이스

오라클 성능 개선 (190510)

ok4u 2019. 5. 9. 13:05

 

 

 

 

스칼라 서브쿼리는 성능이 떨어진다. 

왜냐하면 스칼라 서브쿼리도 상관 서브 쿼리에 속하므로

지속해서 메인 쿼리문의 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;