GOLDILOCKS 는 사용자의 SQL 구문에 대해 가장 효율적으로 처리할 수 있는 실행 계획을 찾는 모듈인 QUERY OPTIMIZER 를 제공합니다.

QUERY OPTIMIZER 는 Access Paths, Join Methods, Query Transformations, 통계정보등을 이용하여 다양한 형태의 PLAN 의 비용을 계산(Cost-Based Optimizer)한 뒤, 가장 적은 비용을 갖는 PLAN 을 선택합니다.


Access Paths, Join Methods, Query Transformations, 통계정보 에 대해서 알아보겠습니다.




Query Transformations

조건 구문을 View 로 Push 하는 기능 혹은 SubQuery 를 Join 형태로 변환하는 기능을 수행합니다.

Query Transformations 은 Heuristic Query 와 Cost-Based Query 로 나뉘어집니다.


  Heuristic Query Transformations

   Query 를 변형하는 것이 변형하지 않은 것보다 항상 효율적인 경우에 대한 Transformation 을 수행하는 것을 의미합니다.

  Cost-Based Query Transformation

   Query 를 변형하는 것이 항상 효율적이지 않은 경우 변형 전후의 비용을 계산하여 효율적인 형태를 찾아 결정하는 것을 의미합니다.


Query Transformations 에 대해 GOLDILOCKS 는 다음의 기법을 제공합니다.

- Simple View Merging

- Filter Push Down

- SubQuery Unnesting

- Single Table Min/Max Aggregation Conversion

- Rewrite Target on Exists


 기법 명칭

 설명

 Simple View Merging

 Simple View 를 상위 쿼리에 합병하는 기능

 Filter Push Down

 WHERE 절에 존재하는 조건 중 FROM 절에 기술한 SubQuery 에 적용 가능한 조건을 적용하는 기능

 SubQuery Unnesting

 조건절에 존재하는 SubQuery 를 Join 형태로 풀어내는 기능

 Single Table Min/Max

 Aggregation Conversion

 단일 테이블에 대해 최대/최소 값을 요구하는 질의에 대해 해당 컬럼에 대한 INDEX 가 존재하는 경우 INDEX 를 이용하여 결과를 반환하는 기능

 Rewrite Target On Exists

 EXISTS 혹은 NON EXISTS 연산에 존재하는 SubQuery 의 출력값을 상수값으로 변환하는 기능




Access Paths

단일 테이블에 대한 접근 방법을 의미합니다.


Access Paths 에 대해 GOLDILOCKS 는 다음의 기법을 제공합니다.

- Table Access

- Index Access

- Rowid Access

- Index Concat


 기법 명칭

 설명

 Table Access

 저장된 테이블 그대로를 Scan 하는 방식

 Index Access

 테이블에 대한 검색시 Index 를 이용하여 Scan 하는 방식

 Rowid Access

 테이블에 대한 검색시 RowID 를 이용하여 해당 페이지에 직접 접근하는 방식

 Index Concat

 WHERE 절에 OR 이 존재하고 OR 에 의해 나누어진 조건이 각각 Index Access 가 가능한 경우 Index Access 의 결과를 통합하여 하나의 결과로 만드는 방식




Join Methods

두 테이블의 Join 연산 방법을 의미합니다.


Join Methods 에 대해 GOLDILOCKS 는 다음의 기법을 제공합니다.

- Nested Loops Join

- Sort Merge Join

- Hash Join

- Join Concat


 기법 명칭

 설명

 Nested Loops Join

 Inner Node, Outer Node 에 별도의 INSTANT 를 생성하지 않고 Join 을 수행하는 방식

 Sort Merge Join

 Inner Node 와 Outer Node 의 데이터를 Join 조건에 해당하는 컬럼으로 정렬한 다음 순차적으로 비교하며 Join 결과를 반환하는 방식

 Hash Join

 Inner Node 에 Hash Instant 를 생성하여 Join 을 수행하는 방식

 Join Concat

 Join 조건에 OR 이 존재하고 OR 에 의해 나누어진 Join 조건들이 각각 별도의 Join 으로 처리되어 결과를 하나로 통합하는 방식




통계정보

- 테이블 통계정보

- 컬럼 통계정보

- 인덱스 통계정보


 통계정보

 정보에 포함된 내용

 테이블 통계정보

 데이터 개수

 컬럼 통계정보

 서로 다른 값의 개수

 NULL 값의 개수

 값의 평균 길이

 최소값

 최대값

 인덱스 통계정보

 서로 다른 KEY 의 개수





위의 기법들은, GOLDILOCKS 엔진에서 혹은 사용자가 직접 지정할 수 있습니다.

기법별로 사용제약사항이 있지만, 너무 지저분해 질거같아 작성하지 않았습니다.

위의 내용은 다양한 쿼리를 경험해 보면서 쌓아가야 할 지식입니다.


각 기법별로 어느 쿼리에서 어떻게 사용해야 더 좋은 성능을 내는지는, GOLDILOCKS 에서 많은 쿼리를 사용해보시길 바랍니다.

블로그 이미지

사용자 꽁담