InnoDB타입 table과 MyISAM타입 table에 대한 고찰.
- 먼저 나온게 MyISAM 타입이고 속도는 MyISAM 타입이 훨씬 빨랐는데
이후에 InnoDB 타입이 나오면서
트랜잭션, 외부키참조, 트리거 등 훌륭한 많은 기능이 추가되었다.
이후에 패치하면서 속도가 향상되었는데
지금은 MyISAM 타입과 거의 비슷한 속도라고 한다. - 일반적으로 MyISAM 타입은 트렌젝션을 지원하지 않는다.
그래서 insert, update, delete 작업시 부가적인 작업을 하지 않는다.
하지만 InnoDB타입은 트랜젝션을 지원한다. - 여러가지 상황에 따라 다르겠지만,
일반적으로 MyISAM 타입은 insert, update할 때 빠르고,
InnoDB 타입는 검색시 빠르다고 한다.
혼용시 서버 메모리 설정을 보다 잘 해야한다고 한다.
InnoDB 타입은 파일 용량에 제한이 있는 시스템에서
파일을 여러개로 나눠서 사용가능하니 좋은데,단순쿼리이고 파일 용량에 문제도 없다면 쿼리속도는
MyISAM 타입이나 InnoDB 타입이나 별 차이는 없을 것으로 보여요.
기본적으로 InnoDB 타입을 썻을때 Mysql 은 기본이 자동커밋모드입니다.
그래서 하나 하나의 Insert, Update, Delete 를 처리하고
나서 커밋을 처리 하기 때문에 일반적으론 느립니다.
동시에 읽고 쓰기가 많은 경우
(동시에 읽고쓰기가 많은 경우라함은 초당 400~500 query) 라면
InnoDB 타입을 추천해요.물론 속도는 query문을 어떻게 만드냐에 따라서 달라질 수 있지만…
안정성 측면에서 InnoDB 타입이 MyISAM 타입보다는 훨씬 뛰어나요.
myisam은 대략 초당 100 query 정도일경우 적합할 것 같네요
일반 게시판 수준으로 보시면 좋을듯…
MyISAM 타입은 업데이트시 테이블 락이 걸리지만,
InnoDB 타입은 행단위 락이 걸리기 때문에
MyISAM 타입보다 느린 속도를 벌충할 수 있는 경우가 있습니다.
많은 기능을 제공하려다 보면, 프로그램이 무거워 지는 것은 당연해지죠.
그러다 보니, MyISAM보다 InnoDB가 느리긴 합니다.
두 테이블 타입의 특성도 많이 다르고,
절대적으로 몇 배 느리다라고 이야기 하는 것은 힘들죠.예를 들어, SELECT COUNT(*) FROM tbl_name 이런 쿼리가 있다면,
MyISAM의 경우, 레코드 개수를 따로 저장을 해 두기 때문에, 0.00초도 안 걸리지만,
InnoDB는 일일히 테이블의 레코드 수를 구하기 때문에 시간이 많이 걸립니다.
하지만,
위와 같은 쿼리는 보통은 많이 안 쓰이죠.
WHERE 조건이 들어가면, 걸리는 시간은 거의 비슷해 집니다.
또한 MyISAM은 Table level locking을 사용하고
InnoDB는 row level locking을 사용합니다.
레코드 수가 많고, 동시 사용자가 많은 경우, InnoDB의 성능이 좋게 나옵니다.
(이건 테스트 해 보기가 쉽지는 않죠)
레코드 수가 많을 때 ALTER도 MyISAM이 많이 빠른 듯 해요…
정리 하자면,
쿼리 및 상황에 따라 둘의 성능이 빠른 것도 있고, 느린 것도 있다는 것이죠.
대부분 일반적인 상황에서는 InnoDB가 느리다고 생각하시긴 합니다.
Foreign Key나 Transaction 등이 꼭 필요한 상황이면,
약간의 속도를 포기하시고 InnoDB를 사용하시구요.옛날에 MyISAM으로 프로그래밍하는데 불편한 점이 없었고, 속도도 중요하시다면
그냥 MyISAM을 쓰시는게 좋을 듯 합니다.~~~














글 잘 읽었습니다.
글 잘 읽었습니다. ^^
글 잘 봤습니다~.
제 블로그로 펌했는데 문제가 되면 삭제할테니 말씀해주세요=)