[MySQL] TINYINT vs BIT - 어떤 것을 사용해야 할까?
MySQL에서 boolean 값을 저장할 때 주로 사용되는 TINYINT와 BIT 타입에 대해 비교 분석해보자.
데이터 타입 특징
TINYINT
-- TINYINT 정의
CREATE TABLE test_tinyint (
id INT PRIMARY KEY,
is_active TINYINT(1)
);
-- 데이터 삽입
INSERT INTO test_tinyint VALUES (1, 1); -- true
INSERT INTO test_tinyint VALUES (2, 0); -- false
- 저장 공간: 1바이트
- 값 범위: -128 ~ 127 (TINYINT SIGNED) 또는 0 ~ 255 (TINYINT UNSIGNED)
- boolean 용도로 사용 시 주로 TINYINT(1) 사용
- 실제 저장되는 값: 0 또는 1
BIT
-- BIT 정의
CREATE TABLE test_bit (
id INT PRIMARY KEY,
is_active BIT(1)
);
-- 데이터 삽입
INSERT INTO test_bit VALUES (1, b'1'); -- true
INSERT INTO test_bit VALUES (2, b'0'); -- false
- 저장 공간: M비트 (BIT(M)에서 M의 값)
- 값 범위: 0 또는 1 (BIT(1)의 경우)
- 비트 단위 연산 가능
- 실제 저장되는 값: 비트값
주요 차이점
1. 가독성
-- TINYINT 조회
SELECT * FROM test_tinyint WHERE is_active = 1;
-- BIT 조회
SELECT * FROM test_bit WHERE is_active = b'1';
-- 또는
SELECT *, is_active + 0 FROM test_bit; -- 숫자로 변환하여 조회
2. 성능
-- 인덱스 생성
CREATE INDEX idx_active_tinyint ON test_tinyint(is_active);
CREATE INDEX idx_active_bit ON test_bit(is_active);
- TINYINT가 일반적으로 더 나은 성능을 보임
- 데이터베이스 도구에서의 표시가 TINYINT가 더 직관적
- 프로그래밍 언어와의 호환성
// Java에서 사용 예 // TINYINT의 경우 boolean isActive = resultSet.getBoolean("is_active"); // 자동 변환 // BIT의 경우 boolean isActive = resultSet.getByte("is_active") == 1; // 추가 변환 필요할 수 있음
사용 권장사항
TINYINT 사용이 권장되는 경우
-- Boolean flag로 사용
CREATE TABLE users (
id INT PRIMARY KEY,
is_active TINYINT(1) DEFAULT 1,
is_deleted TINYINT(1) DEFAULT 0,
email_verified TINYINT(1) DEFAULT 0
);
BIT 사용이 권장되는 경우
-- 비트 연산이 필요한 경우
CREATE TABLE permissions (
id INT PRIMARY KEY,
access_flags BIT(8) -- 8개의 권한을 비트로 관리
);
실제 사용 예시
TINYINT 활용
-- 일반적인 boolean 플래그
CREATE TABLE articles (
id INT PRIMARY KEY,
title VARCHAR(200),
is_published TINYINT(1) DEFAULT 0,
is_featured TINYINT(1) DEFAULT 0,
created_at TIMESTAMP
);
-- 조회 쿼리
SELECT * FROM articles WHERE is_published = 1 AND is_featured = 1;
BIT 활용
-- 비트 플래그 활용
CREATE TABLE user_settings (
user_id INT PRIMARY KEY,
preferences BIT(8), -- 8가지 설정을 비트로 관리
FOREIGN KEY (user_id) REFERENCES users(id)
);
-- 비트 연산 쿼리
SELECT user_id FROM user_settings WHERE preferences & b'10000000' = b'10000000';
결론 및 권장사항
- 일반적인 boolean 값 저장
- TINYINT(1) 사용 권장
- 더 나은 도구 지원
- 더 직관적인 쿼리 작성
- 비트 연산이 필요한 경우
- BIT 사용 권장
- 효율적인 비트 단위 연산
- 저장 공간 최적화 가능
'개발&프로그래밍' 카테고리의 다른 글
[iTerm2] 스크롤 무제한으로 늘리기 - Unlimited scrollback 설정 (0) | 2025.02.10 |
---|---|
[MySQL] "Integer display width is deprecated" 경고 메시지 이해하기 (0) | 2025.02.07 |
[MAC] zsh-syntax-highlighting 설치 및 사용하기 (0) | 2025.01.10 |
[MAC] zsh-autosuggestions 설치법 및 사용법 (0) | 2025.01.10 |
[IntelliJ] 최적화 설정 : 메모리설정, (1) | 2024.12.15 |
댓글