• 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. 기타 스토리지 엔진
  • 1. 스토리지 엔진 설정
    2. MyISAM 스토리지 엔진
    3. MEMORY 스토리지 엔진
    4. CSV 스토리지 엔진
    5. ARCHIVE 스토리지 엔진
    6. BLACKHOLE 스토리지 엔진
    7. MERGE 스토리지 엔진
    1. MERGE 테이블의 장단점
    2. MERGE 테이블의 문제점
    8. FEDERATED 스토리지 엔진
    9. EXAMPLE 스토리지 엔진
    10. 다른 스토리지 엔진
    11. MySQL 스토리지 엔진 아키텍처 개요
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

15.7.2 MERGE 테이블의 문제점

MERGE 테이블의 알려진 문제점은 다음과 같습니다.

  • 5.1.23 버전 이전의 MySQL Server에서는 MyISAM의 비 일시적인 아이의 테이블을 가진 임시 병합 테이블을 만들 수있었습니다.

    버전 5.1.23에서는 MERGE 아이는 부모의 테이블을 통해 잠금되었습니다. 부모가 일시적이면 부모가 잠겨 않았기 때문에 아이도 잠겨 없습니다. MyISAM 테이블을 동시에 사용하면 테이블이 손상되었습니다.

  • ALTER TABLE 을 사용하여 MERGE 테이블을 다른 스토리지 엔진으로 개조하면 기본 테이블에 매핑이 손실됩니다. 대신 변경된 테이블에 기초 MyISAM 테이블의 행이 복사되고 그 때 지정된 스토리지 엔진을 사용합니다.

  • MERGE 테이블 INSERT_METHOD 테이블 옵션은 MERGE 테이블에 삽입에 어떤 기초 MyISAM 테이블을 사용하는 방법을 보여줍니다. 그러나 그 MyISAM 테이블에 AUTO_INCREMENT 테이블 옵션을 사용하여 하나 이상의 행이 MyISAM 테이블에 직접 삽입 될 때까지 MERGE 테이블에 삽입은 적용되지 않습니다.

  • MERGE 테이블은 테이블 전체 UNIQUE 제약 조건을 유지할 수 없습니다. INSERT 를 실행하면 데이터는 첫 번째 또는 마지막 MyISAM 테이블 ( INSERT_METHOD 옵션에서 지정됩니다)에 들어갑니다. MySQL은 고유의 키 값이 MyISAM 테이블 내에서 고유 한 남아 있는지를 보장하지만 컬렉션의 모든 기초 테이블에 대해서는 보증하지 않습니다.

  • MERGE 엔진은 기본 테이블 세트에 고유성을 적용 할 수 없기 때문에 REPLACE 는 예상대로 작동하지 않습니다. 다음의 두 가지 중요한 사실이 있습니다.

    • REPLACE 는 쓰려고하는 기초 테이블에서만 고유 키 위반을 검색 할 수 있습니다 ( INSERT_METHOD 옵션에서 지정됩니다). 이것은 MERGE 테이블 자체의 위반과는 다릅니다.

    • REPLACE 이 고유 키 위반을 발견했을 경우, 쓰는 기초 테이블의 해당 행만을 변경합니다. 즉 INSERT_METHOD 옵션에 지정된 첫 번째 또는 마지막 테이블입니다.

    INSERT ... ON DUPLICATE KEY UPDATE 에 대해서도 고려가 적용됩니다.

  • MERGE 테이블은 파티셔닝을 지원하지 않습니다. 즉, MERGE 테이블도 MERGE 테이블의 기초 MyISAM 테이블도 분할 할 수 없습니다.

  • 열린 MERGE 테이블에 매핑 된 어떤 테이블도 ANALYZE TABLE , REPAIR TABLE , OPTIMIZE TABLE , ALTER TABLE , DROP TABLE , DELETE ( WHERE 절없이) 또는 TRUNCATE TABLE 을 사용해서는 없습니다. 이렇게하면 MERGE 테이블은 여전히 원래의 테이블을 참조하고 있기 때문에 예기치 않은 결과가 될 가능성이 있습니다. 이 문제를 해결하려면 명명 된 작업을 수행하기 전에 FLUSH TABLES 명령문을 발행하여 확실하게 MERGE 테이블이 열려되지 않도록합니다.

    예기치 않은 결과는 MERGE 테이블에 대한 작업을 통해 테이블의 손상이보고 될 가능성이 있습니다. 기초 MyISAM 테이블에서 명명 된 조작의 후에이 발생한 경우 손상된 메시지는 거짓입니다. 이를 해결하려면 MyISAM 테이블을 변경 한 후에 FLUSH TABLES 문을 실행합니다.

  • MERGE 스토리지 엔진의 테이블 매핑은 MySQL의 상위 레이어에서 숨어 있기 때문에, MERGE 테이블에 의해 사용되는 테이블에서 DROP TABLE 은 Windows에서 작동하지 않습니다. Windows에서는 열려있는 파일의 삭제를 허용하지 않기 때문에 먼저 모든 MERGE 테이블을 플러시하거나 ( FLUSH TABLES 를 사용합니다) 테이블을 삭제하기 전에 MERGE 테이블을 삭제해야합니다.

  • MyISAM 테이블과 MERGE 테이블 정의는 테이블에 액세스 할 때 체크됩니다 (예를 들어, SELECT 또는 INSERT 문의 일부로). 이 검사는 테이블 정의와 부모의 MERGE 테이블의 정의가 컬럼 순서, 유형, 크기 및 관련 인덱스를 비교하여 일치하는 것을 보증합니다. 테이블간에 차이가있는 경우 오류가 리턴 명령문이 실패합니다. 테이블이 열릴 때 이러한 검사가 이루어지기 때문에 하나의 테이블의 정의를 변경하면 (컬럼의 변경, 컬럼의 순서 엔진의 변경 등) 명령문이 실패하는 원인이됩니다.

  • MERGE 테이블과 기본 테이블의 인덱스 순서는 동일해야 안됩니다. ALTER TABLE 을 사용하여 MERGE 테이블 내에서 사용되는 테이블에 UNIQUE 인덱스를 추가 한 다음 ALTER TABLE 을 사용하여 MERGE 테이블에 고유하지 않은 인덱스를 추가하면 기본 테이블에 고유하지 않은 인덱스가 이미 존재하고 그 테이블의 인덱스 순서는 다릅니다. (이것이 발생하는 중복 키를 빠르게 찾을 수 있도록 ALTER TABLE 이 고유하지 않은 인덱스 앞에 UNIQUE 인덱스를 배치하는 것입니다.) 그 결과, 이러한 인덱스를 가진 테이블에 대한 쿼리는 의외의 결과 를 가져올 수 있습니다.

  • ERROR 1017 (HY000) : Can not find file : ' tbl_name .MRG '(errno : 2) 오류 메시지가 표시되는 경우 일반적으로 몇 가지 기본 테이블이 MyISAM 스토리지 엔진을 사용하지 않는 것을 나타냅니다. 이러한 테이블이 MyISAM 임을 확인하십시오.

  • MERGE 테이블 행의 최대 값은 2 64입니다 (~ 1.844E + 19에서 MyISAM 테이블의 경우와 같다). 여러 MyISAM 테이블을이 수보다 많은 행을 포함하는 단일 MERGE 테이블에 병합 할 수 없습니다.

  • MERGE 스토리지 엔진은 INSERT DELAYED 명령문을 지원하지 않습니다.

  • 부모의 MERGE 테이블을 가진 다른 행 형식의 기초 MyISAM 테이블을 사용하면 현재 실패하는 것으로 알려져 있습니다. 버그 # 32364를 참조하십시오.

  • LOCK TABLES 이 실시되는 경우, 비 일시적인 MERGE 테이블 조인 목록을 변경할 수 없습니다. 다음은 작동하지 않습니다.

     CREATE TABLE m1 ... ENGINE = MRG_MYISAM ...;
     LOCK TABLES t1 WRITE, t2 WRITE, m1 WRITE;
     ALTER TABLE m1 ... UNION = (t1, t2) ...;
    

    그러나 임시 MERGE 테이블에서는 이렇게 할 수 있습니다.

  • 임시 MERGE 해도 비 일시적인 MERGE 테이블로도 CREATE ... SELECT 에서 MERGE 테이블을 만들 수 없습니다. 예 :

      CREATE TABLE m1 ... ENGINE = MRG_MYISAM ... SELECT ...; 

    이를 시도하면 tbl_name 은 BASE TABLE 이 아니라는 오류입니다.

  • 있는 경우, MERGE 와 기초 테이블간에 PACK_KEYS 테이블 옵션 값이 다르면 기초 테이블에 CHAR 또는 BINARY 컬럼이 포함 된 경우 예기치 않은 결과입니다. 해결 방법은 ALTER TABLE 을 사용하여 관련된 모든 테이블에 PACK_KEYS 값이 동일하다는 것을 보장합니다. (Bug # 50646)


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