MySQL의 부울 값에 대한 TINYINT 대 ENUM(0, 1)
MySQL의 부울 값에 대한 TINYINT 대 ENUM(0, 1)
값이 0과 1인 Tinyint와 MyISAM 테이블의 ENUM 0,1과 MySQL 5.1 중 어느 것이 더 나을까요?
사용가능BIT(1)
mysql 5.1 참조에 언급된 바와 같이.추천하지 않겠습니다.enum
아니면tinyint(1)
~하듯이bit(1)
부울 값을 저장하는 데 1비트만 필요합니다.tinyint(1)
8비트가 필요합니다.
제 연구에 따르면 BIT(1)은 5.0.3 이전 버전의 MySQL에 대한 TINYINT(1)의 동의어입니다.
5.0.3 이후의 MySQL 버전은 BIT 데이터 유형의 작동 방식을 변경합니다.이것은 더 이상 TINYINT의 동의어가 아니며 1바이트 미만으로 무엇이든 저장할 수 있는 유일한 데이터 유형입니다.
이 데이터 유형은 TINYINT 또는 ENUM을 사용하는 것보다 선호할 수 있습니다.블로그에 있는 세 가지 중에서 어떤 것이 가장 빠르고 공간 사용이 가능한지 시험해 볼 생각입니다.크기와 속도 결과를 보려면 하단에 링크가 있습니다.테스트베드: OpenBSD와 MySQL을 실행하는 소비자 등급 펜티엄 III 박스가 구겨집니다. (더 느린 DB 개발 박스를 사용하면 악성 코드의 영향을 실제로 느낄 수 있습니다.또한 테스트 쿼리 간의 차이가 더 분명합니다.또는 리소스가 거의 할당되지 않은 VM을 사용해 보십시오.)
MySQL 공식 설명서.
- v5.1 - http://dev.mysql.com/doc/refman/5.1/en/numeric-type-overview.html
- v5.6 - http://dev.mysql.com/doc/refman/5.6/en/numeric-type-overview.html
슈워츠 남작이 이 일에 대해 할 말이 있습니다.
ENUM은 예상되는 것을 명확하게 해주기 때문에 더 바람직하다고 생각합니다. 측정 가능한 방식으로 성능을 저하시킨다면 매우 놀랄 것입니다.이 작업을 수행하려면 열에 대한 제약 조건을 확인해야 합니다. 현재 MySQL 스토리지 엔진 중 이를 지원하는 것은 없습니다.
Enum은 어떤 면에서 개발자나 프로그래머에게 "힌트"를 제공합니다.하지만 보통은 계획적으로 처리하는 것이 좋습니다.따라서 모두 1바이트를 사용하는 ENUM(0,1), BIT(1), TINYINT(1)이든 간에 서버에서 처리하는 것이 비트(1) 또는 enum(0,1)의 2를 서버로 전송하는 것보다 대부분의 경우 클라이언트 측에서 처리하는 것이 더 나을 것입니다. 그러면 서버에서 처리해야 할 오류를 반환합니다. 더 많은 리소스(네트워크 + 서버 CPU + 클라이언트 CPU x 2)를 사용합니다.
0은 일반적으로 거짓, 1은 참을 의미합니다.
최상의 성능과 공간 요구사항을 위해서는 부울 값을 수집하여 동일한 TINYINT에 저장해야 합니다. 예를 들어 최대 8개의 부울 값을 TINYINT에 저장합니다. 16개의 부울 값을 SMILINT 등에 저장합니다.BIT(1) 및 ENUM 모두 1바이트 이상을 사용합니다.BIT(M) - approximately (M+7)/8 bytes
참조: https://dev.mysql.com/doc/refman/8.0/en/storage-requirements.html .그래서 만약 당신이 부울값을 1개 저장한다면, 나는 TINYINT를 사용할 것입니다. 왜냐하면 그것은 BIT와 ENUM과 동일한 오버헤드를 가지고 있지만, 당신이 필요하다면 나중에 7개의 부울값을 더 저장할 수 있는 옵션을 제공하기 때문입니다.
언급URL : https://stackoverflow.com/questions/3546186/tinyint-vs-enum0-1-for-boolean-values-in-mysql