• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 1. Stored Programs 정의
    2. 스토어드 루틴 (프로시저 및 함수)의 사용
    3. 트리거 사용
    4. Event Scheduler 사용
    5. Views 사용
    1. View 구문
    2. View Processing 알고리즘
    3. 업데이트 가능 및 삽입 가능한 View
    4. View Metadata
    6. Stored Programs 및 Views 액세스 제어
    7. Stored Programs의 Binary Logging
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

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() 등)

  • DISTINCT

  • GROUP BY

  • HAVING

  • LIMIT

  • UNION 또는 UNION ALL

  • 선택 목록의 서브 쿼리

  • 리터럴 값만을 참조 (이 경우 기본이되는 테이블이 없습니다)


서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved