오라클에서 힌트작성 관련해서... 0 1 2,772

by 케빈재브라위너 [Oracle Tuning] [2024.07.09 15:48:55]


오라클에서 쿼리튜닝을 조금 해야 하는데, 궁금한 점이 생겼습니다.

1번 케이스 : SELECT /*+ gather_plan_statistics */ /*+ LEADING(C B D) INDEX(C IX_인덱스이름_03) USE_NL(B) USE_NL(D) */  

2번 케이스 : SELECT /*+ gather_plan_statistics LEADING(C B D) INDEX(C IX_인덱스이름_03) USE_NL(B) USE_NL(D) */  

 

1번 케이스대로 쿼리 수행 후 

select * from table(dbms_xplan.display_cursor(null,null,'advanced allstats last')) ;

결과를 확인하면

Cost : 38225 

Buffers: 23M

수행시간: 2분 34초

 

 

2번 케이스대로 쿼리수행 후  결과확인하면

Cost : 57949 

Buffers: 664K

수행시간: 2초 이내 

 

왜 이런 차이가 발생하는지 궁금합니다.

오라클 힌트는 SELECT 당 1개만 먹히는거로 아는데 서로 다르게 결과가 나와서요

 

 

** 추가로 

SELECT /*+ gather_plan_statistics */

       * FROM (   확인하고자하는 쿼리  ) 

 

select * from table(dbms_xplan.display_cursor(null,null,'advanced allstats last')) ;

 

이렇게 확인하라고도 나와있는데 이 방식은 잘못된건가요? 무슨차이가 있나요?

by pajama [2024.07.10 17:04:59]

질문하신 내용이 이해가 잘 안되는데.. 아는부분만 찾아서 말씀드리자면

gather_plan_statistics 힌트는 실제 쿼리가 실행됐을때의 실행계획을 저장하는 기능으로 보이고,

dbms_xplan.display_cursor(null,null,'advanced allstats last') 는 가장 최근의 실행계획을 보여주는 쿼리입니다.

잘못된 방식은 없고 두가지 방식 다 동일하게 봐도 될듯하네요.

http://www.gurubee.net/lecture/2141

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입