ㄱ. 목적

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만이 좋은 것은 아니다.


Posted by 시크한공돌이
,