20.5.2 View Processing 알고리즘
CREATE VIEW 또는 ALTER VIEW 옵션 ALGORITHM 절은 표준 SQL에 대한 MySQL 확장입니다. 이것은 MySQL에 의한 뷰의 처리 방법에 영향을 미칩니다. ALGORITHM 은 MERGE , TEMPTABLE 또는 UNDEFINED 의 3 개의 값을받습니다. ALGORITHM 절이 없으면 기본 알고리즘은 UNDEFINED 입니다.
MERGE 의 경우 뷰를 참조하는 명령문 텍스트와 뷰 정의가 병합 된 뷰 정의 부분이 해당 문 부분을 대체합니다.
TEMPTABLE 의 경우 뷰의 결과를 임시 테이블에 가져온 다음 문을 실행하는 데 사용됩니다.
UNDEFINED 의 경우, MySQL은 사용할 알고리즘을 선택합니다. 가능한 한 TEMPTABLE 보다 MERGE 가 우선됩니다. 이것은 일반적으로 MERGE 쪽이 효율성이 높고, 임시 테이블을 사용하면 뷰를 업데이트 할 수 없기 때문입니다.
명시 적으로 TEMPTABLE 를 선택하는 이유는 임시 테이블이 작성된 후에, 문 처리를 완료하는 데 사용되기 전에 기본이되는 테이블에 잠금을 해제 할 수 있기 때문입니다. 그 결과, MERGE 알고리즘보다 신속하게 잠금이 해제 된 뷰를 사용하는 다른 클라이언트가 장시간 차단 될 수 없습니다.
다음의 3 가지 이유로 인해 뷰 알고리즘을 UNDEFINED 수 있습니다.
CREATE VIEW문 안에ALGORITHM절이 존재하지 않는다.CREATE VIEW문에 명시적인ALGORITHM = UNDEFINED절이있다.임시 테이블에서만 처리 할 수없는 뷰에 대해
ALGORITHM = MERGE이 지정되어있다. 이 경우, MySQL은 경고를 보내고 알고리즘을UNDEFINED으로 설정합니다.
앞서 언급했듯이, MERGE 는 뷰 정의의 해당 부분을 뷰를 참조하는 명령문에 병합 처리됩니다. 다음 예제에서는 MERGE 알고리즘의 동작에 대해 간략하게 설명합니다. 예를 들어, 다음의 정의를 포함하는 뷰 v_merge 가 존재하고 있다고 가정합니다.
CREATE ALGORITHM = MERGE VIEW v_merge (vc1, vc2) AS SELECT c1, c2 FROM t WHERE c3 > 100;
예제 1 : 다음 명령문을 발행합니다.
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 이되고, AND 연결을 사용하여 뷰 WHERE 절이 문 WHERE 절에 추가되는 점이 다릅니다 (또한 어구의 일부가 올바른 우선 순위로 실행되도록 괄호가 추가됩니다). 결과가 실행되는 문은 다음과 같이됩니다.
SELECT c1, c2 FROM t WHERE (c3 > 100) AND (c1 < 100);
사실상 실행되는 명령문은 다음과 같은 형식의 WHERE 절이 포함되어 있습니다.
WHERE (select WHERE) AND (view WHERE)
MERGE 알고리즘을 사용할 수없는 경우 임시 테이블을 대신 사용해야합니다. 보기에 다음 중 하나의 구조 구문이 포함 된 경우 MERGE 는 사용할 수 없습니다.
집계 함수 (
SUM(),MIN(),MAX(),COUNT()등)DISTINCTGROUP BYHAVINGLIMITUNION또는UNION ALL선택 목록의 서브 쿼리
리터럴 값만을 참조 (이 경우 기본이되는 테이블이 없습니다)