2011-03-13 7 views
0

MySQL 열거 형 데이터 유형을 실험하고 있습니다. 나는 7 개의 ENUM 데이터 타입을 가진 15 개의 컬럼을 가지고있다. VARCHAR가 없습니다. 최대 열 유형은 DATETIME입니다. 그래서 나는 mysql에서 65535 바이트 제한 이내 여야한다. InnoDB를위한 1000 바이트 제한 내조차도.MySQL ENUM 옵션 값이 최대 행 크기에 영향을 줍니까?

ENUM 유형은 큰 문자열 가능성이 있습니다 (1000 열에 2 열). 난 그냥 테이블

ALTER TABLE <tablename> MODIFY <enumCol> ([...1000 values each of max 40 bytes]); 

에 더 많은 ENUM 값을 추가 할 수있는 테이블을 변경하고

ERROR 1117 (HY000): Too many columns 

나는이 연구되고이 오류가의 최대 행 크기와 관련이 있음을 발견 드리려고 후이 오류가 발생했습니다 MySql 테이블.

각 테이블은 테이블 정의를 포함하는 .frm 파일을 가지고 - 또한, 여기 http://dev.mysql.com/doc/refman/5.1/en/column-count-limit.html 읽어 보시기 바랍니다. 서버는 다음 식을 사용하여 파일에 저장된 테이블 정보의 일부를 상한선 인 64KB에 대해 확인합니다.

이 ENUM 값 유형이 여기에 저장되어 이로 인해 오류가 발생합니다 (.frm 파일> 64K)? 아니면 완전히 다른 일이 있습니까?

+0

errrm -이 경우 최대 0 ~ 1000 개의 값을 갖는 열거 형 열을 최대 7 개까지 사용하고 있습니까? –

+0

그 중 하나만 1000 값을가집니다. 나머지는 50에서 100 사이입니다. ENUMS의 장점과 단점에 대해 읽었습니다. 속도 개선을 통해 테스트 할 수 있습니다. 테스트 샘플은 1 천 1 백만 행입니다. – Jai

답변

2

According to the MySQL documentation, ENUM 열은 열거 형에있는 옵션의 양에 따라 1 ~ 2 바이트의 저장 공간만을 차지합니다. 따라서 행 크기에 미치는 영향은 최소화되어야합니다.

그러나 가능한 열거 형 값이 매우 긴 문자열 인 경우 행 크기에 영향을 미치지 않습니다 (실제 문자열 값이 아니라 인덱스에만 인덱스가 저장되기 때문에). 그러나 64KB 제한을 초과 할 수 있습니다 테이블 정의 파일의.

+0

64KB 제한을 초과하면이 오류가 발생합니까? – Jai

+0

@ Jai : 아마도. 이 문제와 대부분의 경우 너무 많은 열을 가져서 발생하는 특정 오류가없는 것으로 보입니다. –

+0

ENUM을 버렸습니다. 그것은 정확하게 1000 개의 값 후에 멈췄다. 또한이 오류가 발생했는지 궁금합니다. – Jai

관련 문제