ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [GOLDILOCKS] 쿼리 옵티마이저, 쿼리 최적화, QUERY OPTIMIZER 알아보기
    Goldilocks DBMS/구조 2018.05.22 01:12

    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 에서 많은 쿼리를 사용해보시길 바랍니다.

    댓글 0

Designed by Tistory.