• 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
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 1. Stored Program 제한
    2. 조건 처리 제한
    3. 서버 측 커서 제한
    4. 서브 쿼리 제약
    5. View 제약
    6. XA 트랜잭션 제약
    7. Character Set 제약
    8. 성능 스키마 제약
    9. 플러그 인증 제한
    10. MySQL 제한
    1. 결합(join) 제한
    2. 데이터베이스 및 테이블 수 제한
    3. 테이블 크기 제한
    4. 테이블 컬럼 및 행 크기 제한
    5. .frm 파일 구조에 의해 부과되는 제한
    6. Windows 플랫폼의 제한
  • 28. MySQL 5.7 새로운 기능

27.10.4 테이블 컬럼 및 행 크기 제한

테이블 당 4096 컬럼는 하드 제한이 있지만, 특정 테이블에서 유효한 최대 수가 더 적을 수 있습니다. 정확한 제한은 상호 작용하는 여러 요인에 따라 다릅니다.

  • 모든 테이블 (스토리지 엔진에 무관) 행의 최대 크기는 65,535 바이트입니다. 스토리지 엔진에서는이 제한 대해 더 제약을 추가하는 경우가 유효한 최대 행 크기는 줄어 듭니다.

    모든 컬럼의 총 길이는 최대 행 크기를 초과 할 수 없기 때문에,이 크기는 컬럼 수 (및 크기의 수도)를 제한합니다. 예를 들어, utf8 문자는 문자 당 최대 3 바이트가 필요하기 때문에, CHAR(255) CHARACTER SET utf8 컬럼의 경우, 서버는 값마다 255 × 3 = 765 바이트를 할당해야합니다. 이 결과 테이블에는 이러한 열을 65,535 / 765 = 85 이상 포함되지 않습니다.

    가변 길이 컬럼의 스토리지에 길이 바이트를 포함, 여기에는 행 크기에 대해 평가됩니다. 예를 들어, VARCHAR(255) CHARACTER SET utf8 컬럼 값의 길이를 저장하는 2 바이트를 사용하므로 각각의 값은 최대 767 바이트를 사용할 수 있습니다.

    BLOB 컬럼과 TEXT 컬럼은 그 내용이 행의 나머지에서 분리되어 저장되기 때문에 행 크기에 각각 9-12 (1 ~ 4 + 8) 바이트입니다.

    컬럼을 NULL 로 선언하면 사용할 수있는 최대 컬럼 수를 줄일 수 있습니다. MyISAM 테이블의 경우 NULL 컬럼 값이 NULL 인지 여부를 기록하기위한 추가 공간을 줄 필요합니다. 각 NULL 컬럼은 1 ​​비트 여분으로 차지해 가장 가까운 바이트로 반올림합니다. 바이트의 최대 유키나가는 다음과 같이 계산할 수 있습니다.

    row length = 1
                 + (sum of column lengths)
                 + (number of NULL columns + delete_flag + 7)/8
                 + (number of variable-length columns)
    

    delete_flag 은 정적 행 형식의 테이블에 대해서는 1입니다. 정적 테이블은 행이 삭제되었는지 여부를 나타내는 플래그로 행 레코드의 1 비트를 사용합니다. 이 플래그는 동적 행 머리글에 저장되므로 동적 테이블의 경우 delete_flag 은 0입니다. MyISAM 테이블 형식의 자세한 내용은 섹션 15.2.3 "MyISAM 테이블 스토리지 포맷" 을 참조하십시오.

    InnoDB 테이블의 경우 스토리지 크기는 NULL 컬럼 및 NOT NULL 컬럼의 경우와 동일하므로 위의 계산은 적용되지 않습니다.

    컬럼이 필요로하는 크기가 32,765 + 2 바이트와 32,766 + 2 바이트이며, 65,535 바이트의 최대 행 크기를 초과 하지 않으므로 테이블 t1 을 만드는 다음 문은 성공합니다.

    mysql> CREATE TABLE t1
        -> (c1 VARCHAR(32765) NOT NULL, c2 VARCHAR(32766) NOT NULL)
        -> ENGINE = MyISAM CHARACTER SET latin1;
    Query OK, 0 rows affected (0.02 sec)
    

    컬럼은 NULL 이며, MyISAM 이 필요로하는 추가 공간은 행 크기가 65,535 바이트를 초과하므로 테이블 t2 을 만들려면 다음 문은 실패합니다.

    mysql> CREATE TABLE t2
        -> (c1 VARCHAR(32765) NULL, c2 VARCHAR(32766) NULL)
        -> ENGINE = MyISAM CHARACTER SET latin1;
    ERROR 1118 (42000): Row size too large. The maximum row size for the
    used table type, not counting BLOBs, is 65535. You have to change some
    columns to TEXT or BLOBs
    

    컬럼 길이는 65,535 바이트의 최대 길이에 들어가고 있습니다 만, 길이를 기록하기 위해 2 개의 추가 바이트가 필요하며,이를 위해 행 크기가 65,535 바이트를 초과하므로 테이블 t3 를 만들려면 다음 문 는 실패합니다.

    mysql> CREATE TABLE t3
        -> (c1 VARCHAR(65535) NOT NULL)
        -> ENGINE = MyISAM CHARACTER SET latin1;
    ERROR 1118 (42000): Row size too large. The maximum row size for the
    used table type, not counting BLOBs, is 65535. You have to change some
    columns to TEXT or BLOBs
    

    컬럼 길이를 65,533 이하로 줄이면 문은 성공합니다.

  • 개별 스토리지 엔진에서 테이블 컬럼 수를 제한하는 기타 제약이 적용될 수 있습니다. 예 :

    • InnoDB 가 허용 컬럼 수는 1000입니다.

    • InnoDB 는 데이터베이스 페이지 (약 8,000 바이트)의 절반 이하로 줄 크기를 제한하고 VARBINARY , VARCHAR , BLOB 또는 TEXT 컬럼을 포함하지 않습니다.

    • 다른 InnoDB 스토리지 포맷 ( COMPRESSED , REDUNDANT )에서 사용하는 페이지 헤더 및 트레일러 데이터의 양이 다르기 때문에 행에 사용 가능한 스토리지 용량에 영향을 미칩니다.

  • 각각의 테이블에는 테이블 정의를 포함 .frm 파일이 있습니다. 이 정의는 테이블에서 허용되는 열 수에 영향을 방법으로이 파일의 내용에 영향을 미칩니다. 자세한 내용은 섹션 D.10.5 ".frm 파일 구조에 의해 부과되는 제한" 을 참조하십시오.


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