Mysql 테이블 InnoDB 방식으로 변경하기(How to change Mysql table information MyISAM to InnoDB)
DB 2014. 1. 9. 19:11ㄱ. 목적
1. Mysql의 테이블을 MyISAM 방식에서 InnoDB 방식으로 변경하는 방법을 알아본다.
ㄴ. 비교
1. MyISAM
장점 : 항상 테이블 명세에 row count를 가지고 있기 때문에
select count(*) from TABLE 이런식의 명령을 사용할 때 엄청 빠르다.
단점 : 많은 단점이 있지만 제일 큰 단점은 row level locking이 아닌 table level locking을 지원하기 때문에 한 테이블에 많은 접근이 이루어질수록 속도가 느려짐.
또한 트렌젝션을 지원하지 못하기 때문에 delete update를 잘못 사용 할 경우 백업 안하였을 경우에 큰 아픔이 따름.
2. InnoDB
장점 : 트랜젝션 지원, row level Locking 지원(ms-sql도 row level locking을 지원하지만 한 테이블에 locking이 많아질 경우 lock escalation(테이블 전체에 락이 걸리는 경우)가 있는데 mysql의 InnoDB에는 없음)
+ 트랜젝션이란?
정확성을 보장하기 위해 완전히 종료해야하는 데이터베이스 처리의 논리적 단위를 표현하는 개념.
대부분의 DBMS에서는 데이터의 일관성 및 동시성을 보장하기 위해 트랜잭션을 제공.
단점 : 풀 텍스트 인덱스를 지원 못함, 속도가 약간 느림, 테이블의 row 수의 정보를 가지고 있지 않기 때문에 select count(*) from TABLE 같은 식의 명령을 내릴때 innodb_buffer_pool에 해당 테이블의 인덱스 정보가 모두 들어가 있지 않다면 다시 스토리지 엔진이 하나하나 수를 계산하여 결과를 보여주기 때문에 매우 느림( 단 인덱스 컬럼으로 where 조건을 주어 count 하면 MyISAM과 동일한 속도를 보임)
ㄷ. 본론
1. 흔히 바꾸는 명령어는 다음과 같다.
alter table 테이블_이름 engine=InnoDB;
하지만 위와 같은 명령어를 통해 테이블의 정보를 변경 할 경우, 실제로 운영하는 서비스의 처리속도가 떨어질 수 있다.
단순한 변환 명령보다 테이블을 새로 만드는 과정을 거치는 것이 좋다.
2. 다음과 같이 제일 마지막 부분의 ENGINE=InnoDB; 와 같은 구문을 첨가함으로써 InnoDB 테이블을 생성 가능하다.
CREATE TABLE customers (a INT, b CHAR (20), INDEX (a)) ENGINE=InnoDB;
3. 생성 후 다음과 같은 명령어로 InnoDB로 생성되었는지 확인 할 수 있다.
SHOW TABLE STATUS FROM test LIKE 'customers'
ㄹ. 결론
1. Mysql 에서 테이블을 InnoDB로 바꾸고 생성하는 법을 배워보았다.
2. 무조건 InnoDB만이 좋은 것은 아니다.
'DB' 카테고리의 다른 글
Mysql create, insert 문 사용하여 DB, table 생성 및 레코드 추가하기. (0) | 2013.12.23 |
---|