초보자입니다.
다음과 같은 쿼리를 튜닝을 해야 하는데 방법을 모르겠네요;;
대충 설명을 드리면 게시글 리스트를 뽑아오는건데
게시글 타이틀이 보이고 그 게시글에 달린 코멘트 개수를 뽑아오는겁니다.
SELECT COL1, (SELECT COUNT(1)
FROM TAB2
WHERE TAB1.DOC_SEQ=DOC_SEQ)
FROM TAB1
ORDER BY DOC_SEQ
원래 쿼리는 조금더 많은 컬럼과 저런식으로 서브쿼리 들어가 있는 게 세개정도 더 있습니다.
쿼리플랜을 보니 스칼라서브쿼리에서 풀스캔하여 문제가 되는것 같은데
어떻게 바꾸면 좋을까요??
TAB1에는 DOC_SEQ컬럼 하나만 인덱스로 잡혀있고
TAB2에는 DOC_SEQ컬럼이 여러개이며 인덱스는 다른 시퀀셜한 컬럼입니다.
튜닝 초보자라 너무 모르는게 많습니다..ㅠㅠ
앞으로 튜닝을 고려할땐 뭐부터 봐야하는건지 대충이라도 알려주시면 감사할것같습니다
토드로 쿼리플랜을 보는데 빨간불 들어온것만 제거하면 성능이 향상되는것인지도요..
빠른 답변 부탁드립니다!!
-----------------------------
정보가 부족하다고 하여
원래 쿼리도 적습니다.
SELECT
R.EMP_CODE,
R.DOC_SEQ,
R.ACT_TYPE,
R.OPEN_YN,
R.REPORT_TITLE ,
R.WRITE_DATE,
R.BASIC_DATE,
R.REGIST_DATE,
R.VIEW_COUNT,
R.COMP_SEQ,
R.CEMP_SEQ ,
R.BUSINESS_TYPE,
EMP.DEPTCODE,
EMP.USERNAME,
R.CONFIRM_STATE,
C.COMP_NAME,
SUBSTR(R.INFO,
0,
100) AS INFO ,
(SELECT
CODENAME
FROM
TB_CODEBOOK
WHERE
GROUPCODE='DEAL'
AND CODE=R.BUSINESS_TYPE) AS BUSINESS_NAME ,
(SELECT
CODENAME
FROM
TB_CODEBOOK
WHERE
GROUPCODE='ACTGB'
AND CODE=R.ACT_TYPE) AS ACT_NAME ,
(SELECT
CODENAME
FROM
TB_CODEBOOK
WHERE
GROUPCODE='CONFIRM'
AND CODE=R.CONFIRM_STATE) AS CONFIRM_NAME ,
(SELECT
D.DEPTNAME
FROM
V_GW_IFS_ORG@HR_DB_LINK D
WHERE
D.DEPTCODE = EMP.DEPTCODE) AS DEPT_NAME ,
(SELECT
COUNT(1)
FROM
TB_CALL_REPORT_LOG
WHERE
DOC_SEQ=R.DOC_SEQ) AS HIT_COUNT ,
(SELECT
COUNT(1)
FROM
TB_CALL_CONFIRM
WHERE
DOC_SEQ=R.DOC_SEQ
AND EMP_CODE= '100314' /**P*/) AS READ_AUTH ,
(SELECT
COUNT(1)
FROM
TB_COMMENT
WHERE
DOC_SEQ=R.DOC_SEQ) AS CMT_COUNT
FROM
TB_CALL_REPORT R,
V_CIS_IFS_EMP@HR_DB_LINK EMP,
TB_CUSTOMER_COMP C
WHERE
R.EMP_CODE = EMP.EMP_CODE
AND C.COMP_SEQ = R.COMP_SEQ
AND R.DEL_YN='N'
ORDER BY
R.WRITE_DATE DESC,
R.DOC_SEQ DESC