본문 바로가기

Database/Oracle

Oracle 테이블 내용 트리구조 표시하기


Oracle 테이블 내용 트리구조 표시하기

  오라클에서는 타 데이터베이스와는 달리 순환 관계라는 기능을 제공합니다. 한 개의 테이블에 모든 부품 관련 정보들을 입력한 후, 조회 시 내부적으로 정의한 순서에 의해 읽어올 수 있는 방법을 말합니다. 즉, 순환 관계란 부모와 자식의 관계처럼 계층적 구조의 자료를 하나의 ENTITY 내에 구조화 하여 기술한 것입니다.

순환 구조 SQL 을 작성하고 실행할 때 중요한 부분은 일반 SQL과는 달리 WHERE 절이 처리 범위를 줄여주는 선행 조건이 아니라는 것입니다. 순환 전개 방식의 선행 처리 조건은 START WITH 절로 순환 구조 처리의 가장 중요한 부분입니다. WHERE 절은 단지 체크 조건으로 결과값에 대해 단순한 필터로만 작용을 합니다. 이리하여 순환 구조 SQL의 튜닝을 위해서는 START WITH 절에 사용되는 컬럼에 대해 인덱스를 생성해야 합니다. 만약 START WITH 의 처리 범위가 넓다면 이를 해당 쿼리 내의 WHERE 절 혹은 START WITH 의 해당 컬럼의 비교값에서 INLINE VIEW를 사용해서 범위를 줄여줘야 합니다.

그 다음으로 중요한 부분은 PRIOR 절입니다. 오라클 매뉴얼을 보거나 모든 책을 보더라도 CONNECT BY PRIOR a = b 라고 기술되어 있습니다. 마치 항상 저렇게 사용해야만 하는 것 처럼 느낄 수도 있습니다. 하지만 PRIOR 절은 반대편에 기술해도 되고 SELECT 절에 기술해도 됩니다. PRIOR의 의미는 실제로는 최초 시작한 노드의 PRIOR 절에 기술되는 컬럼 (a) 값을 읽어 PRIOR 절 내 = 의 반대편 컬럼(b) 에 상수를 제공하겠다는 의미입니다. 그렇다면 PROIR 로 읽은 컬럼 값을 제공받는 반대편 컬럼에도 튜닝을 위해서는 인덱스가 존재해야만 빠른 성능을 보장받을 수 있다는 것입니다.

     

          START WITH 컬럼명 <= 검색모드 시작점 DRIVING 조건

    Connect By [PRIOR] 연결컬럼명 = [PRIOR] 컬럼명 <= Tree구조 연결 조인조건
                      부모에서                     자식에서 
                      자식으로                     부모로
                       
    검색                            검색