Thursday, March 22, 2012

InnoDB타입과 MyISAM타입 table에 대한 고찰

Posted at 2009/05/08

출처: Program2.0

MyISAM과 InnoDB에 대해서 정리 잘하셔서..
그냥 으레 MyISAM을 썼었는데..
역시 무엇이든 경우에 맞게 사용하면 문제 없다는 만고의 진리를 느낌.. ^^


먼저 나온게 MyISAM 타입이고
속도는 MyISAM 타입이 훨씬 빨랐는데
이후에 InnoDB 타입이 나오면서
트랜잭션, 외부키참조, 트리거 등 훌륭한 많은 기능이 추가되었다.
이후에 패치하면서 속도가 향상되었는데
지금은 MyISAM 타입과 거의 비슷한 속도라고 한다.

일반적으로 MyISAM 타입은 트렌젝션을 지원하지 않는다.
그래서 insert, update, delete 작업시 부가적인 작업을 하지 않는다.
하지만 InnoDB타입은 트랜젝션을 지원한다.

여러가지 상황에 따라 다르겠지만,
일반적으로 MyISAM 타입은 insert, update할 때 빠르고, 
InnoDB 타입는 검색시 빠르다고 한다.
혼용시 서버 메모리 설정을 보다 잘 해야한다고 한다.


InnoDB 타입은 파일 용량에 제한이 있는 시스템에서
파일을 여러개로 나눠서 사용가능하니 좋은데,
단순쿼리이고 파일 용량에 문제도 없다면 쿼리속도는
MyISAM 타입이나 InnoDB 타입이나 별 차이는 없을 것으로 보여요.
기본적으로 InnoDB 타입을 썻을때 Mysql 은 기본이 자동커밋모드입니다.
그래서 하나 하나의 Insert, Update, Delete 를 처리하고
나서 커밋을 처리 하기 때문에 일반적으론 느립니다.

동시에 읽고 쓰기가 많은 경우라면 InnoDB 타입을 추천해요.
(동시에 읽고쓰기가 많은 경우라함은 초당 400~500 query)
물론 속도는 query문을 어떻게 만드냐에 따라서 달라질 수 있지만…

안정성 측면에서 InnoDB 타입이 MyISAM 타입보다는 훨씬 뛰어나요.
MyISAM은 대략 초당 100 query 정도일경우 적합할 것 같네요
일반 게시판 수준으로 보시면 좋을듯…

MyISAM 타입은 업데이트시 테이블 락이 걸리지만,
InnoDB 타입은 행단위 락이 걸리기 때문에
MyISAM 타입보다 느린 속도를 벌충할 수 있는 경우가 있습니다.

많은 기능을 제공하려다 보면, 프로그램이 무거워 지는 것은 당연해지죠.
그러다 보니, MyISAM보다 InnoDB가 느리긴 합니다.
두 테이블 타입의 특성도 많이 다르고,
절대적으로 몇 배 느리다라고 이야기 하는 것은 힘들죠.

--이하 생략--

이라고 해봤자 그냥 다 복사해가지고 왔다고 보는게 정확함.. :)
결론은 트랜잭션이 필요하면 InnoDB!!
이도저도 필요없으면 MyISAM!! 으로 닥치고 쓰라는..

No comments: