2010-08-23 4 views
23

MyISAM 테이블과 MySQL 5.1에서 0과 1 값을 가진 Tinyint 또는 ENUM 0,1 어느 것이 더 낫습니까?TINYINT 대 MySQL 부울 값의 ENUM (0, 1)

+0

더 빠르고, 더 적은 저장 공간, 가장 빠른 액세스, 가장 빠른 쓰기 행이 무엇을 의미합니까? 귀하의 질문은 너무 모호하여 제대로 대답하지 못합니다. –

답변

22

mysql 5.1 reference에서 설명한대로 BIT(1)을 사용할 수 있습니다. enum 또는 tinyint(1)tinyint(1)이 8 비트를 필요로하고 bit(1)은 부울 값을 저장하는 데 1 비트 만 필요하므로 권장하지 않습니다.

+0

공간이 아닌 성능을 찾고 있습니다. 비트 인덱스가 tinyint 또는 enum 키보다 빠르다고 생각하십니까? – Wiliam

+1

이와 같은 열에 대한 인덱스를 계획하고 있다면 실망 할 수도 있습니다. 그러한 열에 대한 차별화는 일반적으로 너무 열악하여 인덱스가 존재 함에도 불구하고 전체 테이블 스캔이 사용됩니다. –

+0

@Brian Hooper : 당신이 말한 것을 미안 해요. 미안 해요. – Wiliam

1

예상되는 내용이 명확하기 때문에 ENUM을 사용하는 것이 좋습니다. 측정 가능한 방식으로 성능이 저하되면 매우 놀랄 것입니다. tinyint를 만들기 위해이 작업을 수행하려면 CHECK에 컬럼에 대한 제한이 필요합니다. 현재이 기능을 지원하는 MySQL 스토리지 엔진이 없습니다.

+1

'ENUM'사용을 고려중인 사람은 http://komlenic.com/244/8-reasons-why-mysqls-enum-data-type-is-evil/와 https : //dba.stackexchange를 읽어보십시오. com/questions/6962/advantage-and-disadvantages-to-using-enum-vs-integer-types – billynoah

3

내 연구에 따르면 BIT (1)은 5.0.3 이전의 MySQL 버전에서는 TINYINT (1)과 동의어입니다.

5.0.3 이후의 MySQL 버전은 BIT 데이터 유형의 작동 방식을 변경합니다. 더 이상 TINYINT의 동의어가 아니며 1 바이트 미만의 데이터를 저장할 수있는 유일한 데이터 유형입니다.

이 데이터 유형은 TINYINT 또는 ENUM을 사용하는 것이 더 바람직 할 수 있습니다. 나는 어느 것이 가장 빠르다는 것을 시험하기를 계획하고 나의 blog에 3의 공간 사용법을 계획한다. 크기 및 속도 결과를 확인하려면 맨 아래에 링크가 있습니다. 테스트 베드 : OpenBSD와 MySQL을 실행하는 소비자 용 펜티엄 III 박스. (느린 DB dev 박스를 사용하면 실제로 나쁜 코드의 영향을 느낄 수 있습니다. 또한 테스트 쿼리 간의 차이점을보다 잘 식별 할 수 있습니다.) 리소스가 거의 할당되지 않은 VM을 사용해보십시오.

MySQL 공식 문서.

바론 슈워츠 그것에 대해 대답이있다.

http://www.xaprb.com/blog/2006/04/11/bit-values-in-mysql/

1

열거는 방식으로 개발자 나 프로그래머를위한 "힌트"를 제공합니다. 그러나 대개 프로그래밍 방식으로 처리하는 것이 좋습니다. ENUM (0,1), BIT (1), TINYINT (1)이 모두 1 바이트를 사용하는지 여부에 관계없이 대부분의 경우 비트 단위로 2 비트를 전송하는 대신 클라이언트 측에서 처리하는 것이 좋습니다) 또는 enum (0,1)을 서버에 넣으면 서버는 처리해야 할 오류를 반환합니다. 더 많은 리소스 (네트워크 + 서버 CPU + 클라이언트 CPU x 2)를 사용합니다.

보통 0, 1 참.