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 [일이의 꿈의 공간]
'헬로마켓'과 함께하는 스마트한 중고 아이템 거래