안내
본 문서는 블로그의 운영자인 본인이 Stackoverflow에 올린 답변을 정리한 글입니다.
Stackoverflow URL
http://stackoverflow.com/questions/19919840/mysql-char-13-or-bigint13-when-considering-performance/19919904#19919904
질문
CHAR(13)과 BIGINT(13) 중 어느 것이 속도가 더 빠른가?
답변
아래 예와 같이 BIGINT(1) 으로 선언된 변수에서도 1자리보다 큰 숫자를 저장할 수 있다.
mysql> CREATE TABLE test (col1 BIGINT(1));
Query OK, 0 rows affected (0.02 sec)
mysql> INSERT INTO test VALUES(123456789);
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM test;
+-----------+
| col1 |
+-----------+
| 123456789 |
+-----------+
1 row in set (0.00 sec)
그렇다면 BIGINT(n)에서 n는 어떤 용도로 사용될까? ZEROFILL이라는 거의 사용되지 않는 기능에서 활용된다. 테이블 생성 시 컬럼에 ZEROFILL 옵션을 주는 경우 n보다 적은 자리의 숫자인 경우 앞에 0을 붙여서 모든 숫자들이 동일한 n개의 자리 수를 갖도록 한다. 아래 예를 보자.
ZEROFILL을 사용하지 않는 예
mysql> CREATE TABLE test (col1 BIGINT(10));
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO test VALUES (1), (12), (12345), (123456789), (1234567890);
Query OK, 5 rows affected (0.00 sec)
Records: 5 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM test;
+------------+
| col1 |
+------------+
| 1 |
| 12 |
| 12345 |
| 123456789 |
| 1234567890 |
+------------+
5 rows in set (0.00 sec)
ZEROFILL 옵션을 사용하는 예
mysql> CREATE TABLE test (col1 BIGINT(10) ZEROFILL);
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO test VALUES (1), (12), (12345), (123456789), (1234567890);
Query OK, 5 rows affected (0.00 sec)
Records: 5 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM test;
+------------+
| col1 |
+------------+
| 0000000001 |
| 0000000012 |
| 0000012345 |
| 0123456789 |
| 1234567890 |
+------------+
5 rows in set (0.00 sec)
참고로 필자는 MySQL을 15년간 사용했지만 실무에서 ZEROFILL을 사용해 본적은 한번도 없었다.
“MySQL” 카테고리의 추천 글
- MySQL IN subquery 성능. IN sub query는 가급적 사용을 피하자
- MySQL의 IN() v.s. EXISTS v.s. INNER JOIN 성능 비교
- MySQL INNER JOIN v.s EXISTS 성능 비교
- JOIN에서 중복된 레코드 제거하기
- MySQL 중복 레코드 관리 방법 - INSERT IGNORE, REPLACE INTO, ON DUPLICATE UPDATE
- MySQL GROUP BY 성능 최적화를 위한 INDEX 설계
- MySQL Query Cache를 빠르게 비우기
- MySQL Plugin에 대한 간단한 소개
- MySQL InnoDB Index Statistics
- MySQL Foreign key 사용 시 주의 사항 (Can’t create table (errno: 150))