안녕하세요~
어떤 데이터를 조회 하는데 같은 키 값임에도 조회하는데 시간이 많이 차이가 나서 질문 드립니다.
CREATE INDEX VMS1.IDX_RESMST_09 ON VMS1.RESMST (RESNAME, RESNO) LOGGING TABLESPACE TSVMS01_IDX PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE ( INITIAL 10M NEXT 1M MAXSIZE UNLIMITED MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 BUFFER_POOL DEFAULT );
IDX_RESMST_09 이 인덱스의 경우 조회하는데 5초 가량 걸립니다.
CREATE INDEX VMS1.IDX_USRID ON VMS1.RESMST (ID) LOGGING TABLESPACE TSVMS01_IDX PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE ( INITIAL 184M NEXT 1M MAXSIZE UNLIMITED MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 BUFFER_POOL DEFAULT );
IDX_USRID 해당 인덱스의 경우 조회시 0.030초가 걸립니다.
INITIAL 부분 밖에 차이가 안나는데 인터넷에서 찾아봤으나 이해가 잘 안되서 질문 드립니다.
아... 데이터를 조회 하는데 있어 연번으로 조회를 하는 방법이 있고, ID 값으로 조회를 하는 방법이 있는데 연번과 ID가 키 값임에도 불구하고 출력되는 속도가 틀려 로그를 찍어보니 아래와 같은 쿼리가 찍혀서 출력되는 시간을 비교 해봤습니다
SELECT resno, resname, respsno, FNGETRESCENTNAME(resno), statusdiv, registedate, grpname, email, postno, addr1, addr2, telno, mobno, id FROM (SELECT ROWNUM AS RNUM, email, postno, addr1, addr2, telno, mobno, centcode, resno, resname, respsno, statusdiv, registedate, grpname, id FROM (SELECT /*+ INDEX(resmst IDX_RESMST_09) */ email, postno, addr1, addr2, telno, mobno, centcode, resno, resname, respsno, '' statusdiv, registedate, '' grpname, id FROM resmst WHERE 1=1 AND substr(respsno,0,1) <> 'i' AND resno = 15598348 ORDER BY resname ASC) WHERE ROWNUM <= 10 ) WHERE RNUM BETWEEN 1 AND 10;
이 부분은 연번으로 조회를 한거구요
SELECT resno, resname, respsno, FNGETRESCENTNAME(resno), statusdiv, registedate, grpname, email, postno, addr1, addr2, telno, mobno, id FROM (SELECT ROWNUM AS RNUM, email, postno, addr1, addr2, telno, mobno, centcode, resno, resname, respsno, statusdiv, registedate, grpname, id FROM (SELECT /*+ INDEX(resmst IDX_USRID) */ email, postno, addr1, addr2, telno, mobno, centcode, resno, resname, respsno, '' statusdiv, registedate, '' grpname, id FROM resmst WHERE 1=1 AND substr(respsno,0,1) <> 'i' AND id = 'abcd' ORDER BY resname ASC) WHERE ROWNUM <= '10' ) WHERE RNUM BETWEEN 1 AND 10;
이 부분은 ID로 조회 했을때의 쿼리 입니다.
SELECT resno, resname, respsno, FNGETRESCENTNAME(resno), statusdiv, registedate, grpname, email, postno, addr1, addr2, telno, mobno, id FROM (SELECT ROWNUM AS RNUM, email, postno, addr1, addr2, telno, mobno, centcode, resno, resname, respsno, statusdiv, registedate, grpname, id FROM (SELECT email, postno, addr1, addr2, telno, mobno, a.centcode, a.resno, a.resname, a.respsno, a.statusdiv, b.registedate, '' grpname, b.id id FROM resmst_search a, resmst b WHERE 1=1 AND a.resno = b.resno AND substr(a.respsno,0,1) <> 'i' AND a.centcode = '03003280' AND a.resname LIKE '홍길동' ORDER BY a.resname ASC) WHERE ROWNUM <= 10 ) WHERE RNUM BETWEEN 1 AND 10;
이름으로 조회를 하니... 인덱스를 안타네요
...
이럴 경우 IDX_RESMST_09 인덱스를 사용 하는 곳을 조회해 보고
만약 선두컬럼(resname)을 조회 하는 부분이 없다. 라고 한다면
인덱스 상에서 resname을 지우는게 맞을까요?