모종닷컴

VIEW 알고리즘 이해하기 - MERGE 편 본문

Programming/데이터베이스

VIEW 알고리즘 이해하기 - MERGE 편

모종 2022. 8. 11. 23:37
반응형

뷰 테이블이 있는데 되게 느려져서 좀 찾아보다가 알게된 부분들이 있어 글로 정리하려고 합니다. 

알고리즘

MySQL에서 뷰를 처리할 때 알고리즘의 종류는 아래와 같다.

  • MERGE : MERGE를 사용하면 뷰 정의와 뷰를 참조하는 명령문의 관련 부분이 병합됩니다
  • TEMPTABLE : TEMPTABLE을 선택하면 뷰 결과가 임시 테이블에 저장됩니다.
  • UNDEFINED : MySQL이 사용할 알고리즘을 정합니다. 기본 알고리즘은 optimizer_switch 시스템 변수의 derived_merge 플래그 값에 결정됩니다. UNDEFINED 뷰 알고리즘은 아래와 같은 상황에 지정됩니다.
    • CREATE VIEW 에 알고리즘을 지정하지 않았을 때
    • CREATE VIEW 문에 명시적으로 ALGORGERM = UNDEFINED를 써놨을 때
    • ALGORITHM = MERGE는 임시 테이블로만 처리할 수 있는 뷰에 대해서만 가능하기에 이 경우 MySQL이 경고를 생성하고 알고리즘을 UNDEFINED로 세팅

TEMPTABLE을 명시적으로 지정하는 이유는 임시 테이블이 생성된 후 구문 처리를 완료하기 전에 기본 테이블에서 잠금을 해제할 수 있기 때문입니다. 이로 인해 MERGE 알고리즘보다 잠금 해제가 더 빨라져서 뷰를 사용하는 다른 클라이언트가 오랫동안 차단되지 않을 수 있습니다.

MERGE 이해하기

앞서 언급했듯이 MERGE는 뷰 정의의 해당 부분을 참조하는 문으로 병합하여 처리됩니다. 다음 예제에서는 MERGE 알고리즘의 작동 방식을 간략히 설명합니다. 이 예제에서는 v_merge 뷰가 다음과 같이 정의된다고 가정합니다.

예제 1) 

CREATE ALGORITHM = MERGE VIEW v_merge (vc1, vc2) AS
SELECT c1, c2 FROM t WHERE c3 > 100;

아래 구문을 실행한다고 가정합니다.

SELECT * FROM v_merge;

MySQL은 이 구문을 다음과 같이 처리합니다.

  • v_merge는 t로 치환됩니다.
  • 에스터리스크(*)는 vc1, vc2가 되고 c1, c2로 일치시킵니다
  • 구문에 WHERE 절이 추가됩니다.

실제 실행되는 구문은 다음과 같습니다.

SELECT c1, c2 FROM t WHERE c3 > 100;

예 2)

실행하려는 구문은 다음과 같습니다.

SELECT * FROM v_merge WHERE vc1 < 100;

vc1 < 100이 c1 < 100이 되고 뷰 WHERE 절이 AND 연결을 사용하여 WHERE 절에 추가됩니다.

SELECT c1, c2 FROM t WHERE (c3 > 100) AND (c1 < 100);

 

MERGE 알고리즘을 사용할 수 없는 경우 임시 테이블을 사용해야 합니다.

 

참조

https://dev.mysql.com/doc/refman/5.7/en/view-algorithms.html

반응형