[이론] InnoDB와 MyISAM의 차이점

ds_chanin

·

2019. 3. 29. 00:26


InnoDB? MyISAM?


데이터베이스 엔진이라 함은 CRUD작업을 도와주는 친구들인데

항상 MySQL을 다룰때 엔진 설정은 디폴트로 InnoDB가 되어있다.

사실 이유가 별로 궁금하지 않았다...

그런데 알아야된다는 말을 듣기도 했고, 생각해 보니 내가 쓰는게 뭔지는 알아야 하지 않겠나 싶어 찾아보았다.


MyISAM??

MyISAMMySQL 관계형 데이터베이스 관리시스템 5.5 버전 이전의 기본 스토리지 엔진이다. 이것은 옛 ISAM 코드를 기반으로 했지만, 더 많은 유용한 확장성 가지고 있었다. MyISAM의 가장 부족한 점은 트랜잭션의 지원 부재였다. MySQL 5.5과 이후 판은 참조 무결성 제한과 더 높은 동시성을 보장하기 위해 InnoDB 엔진으로 전환되었다.

  • 위키 백과

진짜 뭔지도 모르고 엔진 선택할 때 주의깊게 보지도 않아서 본 기억도 나지 않는다...

찾아보니 이게 예전에는 주류였다고 한다! 5.5 버전 이전에!!

MyISAM은 Table 단위의 Lock을 지원하기 때문에

게시판 같은 한 사람이 글을 쓰고 다른 많은 사람이 읽는 방식(SELECT 연산)에 최적의 성능을 낸다고 한다.


결국 InnoDB 엔진으로 전환된 이유는 위키에서 보다시피

  • 트랜잭션의 지원 부재

  • 더 높은 참조 무결성 제한

  • 더 높은 동시성 보장

을 위해서 라고 한다.


InnoDB!..

이노DB(InnoDB)는 MySQL을 위한 데이터베이스 엔진이며, MySQL AB가 배포하는 모든 바이너리에 내장되어 있다. MySQL과 사용할 수있는 다른 데이터베이스 엔진에 대한 개선 사항으로 PostgreSQL을 닮은 ACID 호환 트랜잭션에 대응하고 있는 것이 있다. 또한 외래 키(FK)도 지원하고 있다. (이것을 선언적 참조 무결성이라 한다.)

  • 위키 백과

MyISAM을 먼저 보니까 InnoDB가 좋다는건 알겠는데 뭐가 얼마나 다른지는 위키만 봐서는 알 수가 없었다.

물론 전공 수업으로 데이터베이스를 수강하며 트랜잭션의 중요성을 배웠기 때문에 MyISAM의 트랜잭션의 부재가

여러가지 문제를 야기할 수 있겠다는 생각은 들었다.


InnoDB의 장점은 Foreign Key와 Row 단위의 Lock을 지원하는 것이다.

Row 단위의 Lock을 지원하기 때문에 MyISAM보다 빠른 변경작업(INSERT, UPDATE, DELETE 연산)을 한다고 한다.

이러한 두가지 차이점을 미루어 보아 InnoDB의 장점은

  • 트랜잭션 지원

    • 데이터 무결성 보장

    • Commit

    • Roll back

    • 동시성 제어

  • Foreign Key 지원

  • Row Level Lock

으로 간추려서 생각할 수 있을것 같다.