안녕하세요~
어떤 데이터를 조회 하는데 같은 키 값임에도 조회하는데 시간이 많이 차이가 나서 질문 드립니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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 ); |
1 | IDX_RESMST_09 이 인덱스의 경우 조회하는데 5초 가량 걸립니다. |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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가 키 값임에도 불구하고 출력되는 속도가 틀려 로그를 찍어보니 아래와 같은 쿼리가 찍혀서 출력되는 시간을 비교 해봤습니다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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; |
이 부분은 연번으로 조회를 한거구요
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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로 조회 했을때의 쿼리 입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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을 지우는게 맞을까요?