[꼼꼼한 개발자] 꼼코더

43. 코드로 배우는 스프링 웹 프로젝트 - [페이징 처리] - 인덱스와 오라클 힌트(hint), 오라클 힌트 실습, FULL 힌트 본문

Spring/코드로 배우는 스프링 웹 프로젝트

43. 코드로 배우는 스프링 웹 프로젝트 - [페이징 처리] - 인덱스와 오라클 힌트(hint), 오라클 힌트 실습, FULL 힌트

꼼코더 2023. 1. 28. 21:55
반응형

❗️ 인덱스와 오라클 힌트(hint)

웹 페이지의 목록은 주로 시간의 역순으로 정렬된 결과를 보여준다.

최신 데이터가 가장 중요하기 때문이다.

(개발자 입장에서는 정렬을 하지 않는 select문을 실행하고 싶지만 말이다..)

 

오라클은 select문을 전달할 때 ‘힌트(hint)’라는 것을 사용할 수 있다.

말 그대로 데이터베이스에 ‘지금 내가 전달한 select문을 이렇게 실행해 주면 좋겠습니다.’라는 말이다

 

특이하게도 select문을 어떻게 처리하는지에 대한 이야기일 뿐이므로

힌트 구문에서 에러가 나도 전혀 SQL 실행에 지장을 주지 않는다.

 

따라서 힌트를 이용하여 select문 작성 시 실행 계획을 통하여

개발자가 원하는 대로 SQL이 실행되는지 확인하는 습관이 필요하다.

 

가장 많이 사용하는 힌트는 (index, full SCAN 정도가 있다.)


👨🏻‍💻 오라클 힌트 실습

게시물 목록은 반드시 시간의 역순으로 나와야 하므로

SQL에서는 ‘order by bno desc’와 같은 구문을 추가할 수 있다.

 

문제는 ‘order by bno desc’와 같은 조건은

데이터 베이스 상황에 따라서 모든 데이터를 정렬하는 방식으로도 동작할 수 있다.

 

반면에 힌트는 개발자가 어떤 방식으로 실행해 줘야 하는지

명시하기 때문에 조금 강제성이 부여되는 방식이다.

 

아래 두 SQL문은 동일한 결과를 생성하는 SQL이다.

/* 게시물 번호를 역순으로 출력하라 */
select * from tbl_board order by bno desc

/* 게시물 번호를 역순으로 출력하라 */
select /*+ INDEX_DESC(tbl_board pk_board) */
	* from bl_board where bno > 0;

주목할 부분은 두번째 SQL문이다. order by 조건 없이 위와 동일한 결과가 나오는데

select 문에서 힌트를 부여했다 힌트의 내용은

 

‘tbl_board 테이블에 pk_board 인덱스를 역순으로 이용해 줄 것’ 이므로

실행 계획에서 이를 활용하고 있는 것을 확인할 수 있다.

 

힌트 관련하여 자주 사용하는 몇 가지를 언급하자면

힌트 구문 시작는 /*+, 힌트 구문 마무리는 */

 

힌트 자체는 SQL로 처리되지 않기 때문에

위에 그림처럼 뒤에 칼럼명이 나오더라도 별도의 ‘,’로 처리되지 않는다.


💡 FULL 힌트

힌트 중에는 해당 select문을 실행 시

테이블 전체를 스캔할 것으로 명시하는 FULL힌트가 있다.

 

모든 데이터를 스캔하기 때문에 데이터가 많으면 상당히 느리게 실행된다.

예시로 ‘tbl_board 테이블을 FULL 스캔하도록 하고, 정렬까지 해라’라고 한다면 아래와 같다

 

실행 계획을 보면 TBL_BOARD를 FULL로 접근하고

다시 SORT가 적용된 것을 볼 수 있다.

실행시간 역시 1.0초로 오래 걸리는 것을 볼 수 있다.

 

 

 

 

 
Comments