ORDERED와 LEADING은 테이블 간 접근 순서를 결정하는 힌트절이지만 USE_NL, USE_HASH는 테이블 간 접근 방법을 결정하는 힌트절이다. 이러한 힌트절을 통해 오라클 조인 방식을 상황에 맞게 선택해 사용할 수 있다. 오라클의 조인 방식에는 Nested Loop Join, Hash Join, Sort Merge Join 3가지가 있지만, 이중에서 Sort Merge Join은 사용되는 경우가 거의 없다. 개발자가 가장 많이 접하는 조인 방식은 Nested Loop Join이다. 이는 순차적인 루프에 의한 테이블 간 접근 방식이며, 온라인성(OLTP) 쿼리에 많이 사용된다. Hash Join은 해시 함수를 이용한 테이블 간 접근 방식으로, 배치성(Batch) 쿼리에 많이 사용된다. 위 그림의..
동일한 쿼리라도 인덱스 생성 포인트에 따라서 테이블 접근 방향은 가변적이다.따라서 최소한의 코스트가 소요되는 접근 방향을 결정하고 그에 따른 필요한 위치에 인덱스를 생성한다면, 옵티마이저도 우리와 동일한 판단(플랜)을 할 것이다. 하지만 우리가 접한느 대부분의 경우는 이처럼 단순하지는 않다. 위의 그림처럼 1번, 2번, 3번, 4번 모든 컬럼 위치에 인덱스가 존재한다면 테이블의 접근 순서는 명확하지 않다. 고객->주문 방향으로 접근도 가능하고 주문->고객 방향으로 접근도 가능하다.양 방향 접근이 가능한 것이다. 물론 옵티마이저는 수집한 통계정보에 근거하여 가장 최소한의 노력이 드는 방향을 결정하려 할 것이다. 하지만 항상 올바른 결정만 하는 것은 아니다. 만약 우리가 판단하는 접근 방향과 옵티마이저가 판..
힌트절이란 무엇인가? CBO 방식에서 옵티마이저는 주어진 환경(통계정보, SQL문) 하에서 최적의 실행 계획(PLAN)을 제공한다. 그런데 잘못된 SQL문 이나 부정확한 통계정보로 인하여 엉뚱한 실행 계획을 제공할 때도 간혹 있다.이때 힌트절을 통해 잘못된 실행 계획을 바로 잡을 수 있다. 결국 힌트절은 옵티마이저의 실수를 만회할 수 있는 개발자의 마지막 무기라 할 수 있다. SELECT /*+ [힌트절] */ ... FROM ...WHERE ... SQL문에서 힌트절은 주석문 안에 표시한다. 그래서 잘못된 힌트절로 인하여 에러를 리턴하는 일은 없다. 단지 힌트절의 내용대로 적용되지 않을 뿐이다. 오라클이 제공하는 힌트절의 종류는 굉장히 많다. 수 많은 힌트절을 모두 이해하고 상황에 맞게 사용하기에는 너..