본문 바로가기

J.O.B

[mysql] myisam 과 innodb 뭐가 좋을까?


mysql 아마 무료 디비이고 성능이나 기능도 훌륭해서 전세계에서 가장 많이 쓰는 DBMS중에 하나일것이다.


mysql 에서 가장 대표적인 스토리지 엔진이 바로 이 myisam과 innodb인데 사람들은 어떤어떤 서비스를
할껀데 어떤 디비를 사용하는것이 좋을까요? 라고 많이 물어보시더라...

일단 그전에 각 스토리지 엔진의 특성을 살펴보자

1. myisam

장점...
mysql의 대표적인 스토리지 엔진 이며
장점은  select 시 빠르며 풀텍스트 인덱스를 지원한다.
항상 테이블 명세에 row count를 가지고 있기 때문에
select count(*) from TABLE 이런식의 명령을 사용할때 엄청 빠르다.

단점...
뭐 수도 없이 많은데. 가장 큰것은 역시... row level locking 을 지원하지 못한다는것.
select, insert, modify, delete 시 해당 Table 전체에 Locking 이 걸린다.
따라서 row의 수가 커지면 커질수록 속도는 엄청나게 느려진다.

또한 트랜젝션을 지원하지 못하기 때문에 delete update 잘못하면 ... 백업이 없다면 걍 끝..

2. innodb

장점...
트랜젝션 지원
row level Locking 지원 (ms-sql 의 경우도 마찮가지로 row level Locking 을 지원하지만 한 테이블에 locking이 많아질경우 Lock Escalation 즉 테이블 전체에 락이 걸리는 경우가 있는데 mysql innodb에서는 그런 현상이 없다)

단점...
풀텍스트 인덱스를 지원못함
약간 느린속도? (이건 뒤에서 추가 설명)
테이블의 row수의 정보를 가지고 있지 않기 때문에 select count(*) from TABLE 이런식의 명령을 내릴때
innodb_buffer_pool 에 해당 테이블의 인덱스 정보가 모두 들어가 있지 않다면 다시 스토리지 엔진은 하나하나
수를 계산해서 결과를 보여주기 때문에 엄청 느리다.. (단 인덱스 컬럼으로 where 조건을 주어 count 를 하면 myisam 과 동일한 속도)




이정도가 있겠다.

자 이제 어떤 스토리지 엔진을 선택할까?

물론 정답은 자기 원하는바로 -_- 하면.. ㅋㅋ

음..

일단 myisam 은 count 에 유리하다고 했다. 따라서 분석을 요하는 로그 파일 저장에 유리하며.
innodb 는 일반적인 게시판 쇼핑몰등 트랜젝션이 필요하고 또한 한꺼번에 많은 사용자가 동시에 쿼리를
날려도 TABLE Locking 이 발생하지 않기때문에 유리하다.

뭐 그냥 개인 홈페이지나 블로그 같은 작은 것들은 걍 귀찮으니 암거나 써도 무방하다.


그리고 innodb 가 속도가 느리네 어쩌네 하는데 mysql 이 버전업을 거듭하면서
최근 BM을 보면 이미 myisam 을 추월했다.(속도로)


그리고 용도에 따라 스토리지 엔진을 결정하는데 myisam 과 innodb테이블을 같이 사용할경우 join시 주의해야
한다.

myisam 테이블은 모든 액션에 table locking 이 걸리기 때문에 심각하게 속도가 떨어진다.



[출처] : http://www.lscript.co.kr/67 [일이의 꿈의 공간]

'J.O.B' 카테고리의 다른 글

[mysql] myisam 과 innodb 뭐가 좋을까?  (0) 2010.11.22