IT'S YU
[Oracle] - 오라클 힌트(hint) 본문
안녕하세요~ 이번에 설명드릴 내용은 오라클 쿼리에서 사용되는 힌트(hint) 입니다.
보통 웹페이지의 목록은 시간의 역순(최신순)으로 정렬된 결과를 보여줍니다.
최신 데이터가 가장 중요하기 때문에, 시간의 역순으로 정렬해서 보여주는데 만약 데이터의 양이 수백만건 이상이고, ORDER BY의 정렬을 통해 처리한다면 과부하가 걸릴 수 있습니다.
따라서 정렬을 안할 수 있는 방법에 대해 고민을 해야합니다.
인덱스, 오라클 힌트(hint)
오라클에서는 SELECT 문을 전달할 때 "힌트(hint)" 라는 것을 사용할 수 있습니다.
힌트는 데이터베이스에 '지금 내가 전달한 SELECT 문을 이렇게 실행해주면 좋겠습니다.' 와 같은 힌트입니다. 즉 실행 명령을 말합니다.
힌트는 SELECT문을 처리하는 방식이므로 힌트 구문에서 에러가 발생해도 SQL 쿼리의 실행 결과에는 영향을 주지 않습니다.
따라서 힌트를 이용한 SELECT문을 작성한 후에는 실행 계획을 통해 개발자가 원하는 대로 SQL이 실행되는지를 확인하는 습관을 가져야합니다.
게시물의 목록에서 SQL은 ORDER BY bno DESC 등과 같은 쿼리로 처리를 할 수 있는데, 문제는 위와 같은 정렬은 데이터베이스 상황에 따라 존재하는 모든 데이터를 정렬하는 방식으로도 동작할 수 있다는 점입니다.
반면 힌트는 개발자가 데이터베이스에 명령을 내리는 방식이므로 조금 강제성이 부여되는 방식입니다.
힌트를 사용하는 문법과 예제를 통해 알아보겠습니다.
힌트 사용 문법
힌트 구문은 위와 같이 /*+ 로 시작하고 */ 로 마무리됩니다.
힌트 사용 예제
테이블의 쿼리는 다음과 같습니다.

위 두 SQL쿼리는 동일한 결과를 생성합니다.
두번째 SELECT 문은 ORDER BY 조건 없이도 동일한 결과가 나온것에 주목해봅시다.
SELECT문에서 힌트를 부여했는데 힌트의 내용이 'tbl_board 테이블에 pk_board 인덱스를 역순으로 이용할 것' 이라는 명령이므로, 실행 계획에서 이를 활용하고 있는 것을 확인할 수 있습니다.

오라클에서는 위의 INDEX_DESC 힌트 말고도 FULL, INDES_ASC 등등의 다양한 힌트가 있습니다.
FULL 힌트
FULL 힌트는 SELECT문을 실행할 때 테이블 전체를 스캔할 것으로 명시하는 힌트입니다.
FULL 힌트는 테이블의 모든 데이터를 스캔하므로 데이터의 양이 많을경우 실행 속도가 상당히 느립니다.
tbl_board 테이블의 데이터는 약 310만건입니다.

2초가 넘어가는 실행 결과가 발생합니다.

실행 계획에서 보면, TBL_BOARD를 FULL로 접근한 뒤 다시 ORDER BY를 통해 정렬하는 것을 볼 수 있습니다.
따라서 실행 결과가 오래 걸리게 됩니다.
INDEX_ASC, INDEX_DESC 힌트
주로 목록 페이지에서 가장 많이 사용되는 힌트입니다.
ASC / DESC 가 오름차순, 내림차순을 지정하는 것입니다. 위 두 힌트는 주로 ORDER BY를 위해 사용한다고 생각하면 됩니다.

'DB > Oracle' 카테고리의 다른 글
[Oracle] SYNONYM (시노님)- 동의어 (0) | 2022.05.09 |
---|---|
[Oracle] 오라클 데이터베이스 페이징 처리 (0) | 2022.05.09 |
[Oracle] DB 커넥션 풀 (0) | 2022.05.04 |
[Oracle] DB 테이블스페이스 (0) | 2022.05.04 |
[Oracle] DB dump 백업 및 복구 (0) | 2022.05.04 |