본문 바로가기

CS/DataBase

(MySQL) MyISAM vs InnoDB

MyISAM vs InnoDB

MyISAM

한마디로 정의하자면 가볍고 빠르다.

 

엔진 자체가 아주 기본적인 기능만 제공하여 데이터 변경이 자주 일어나지 않고 검색이 자주 일어나는 테이블인 경우

사용하기에 적합하다.

 

다만 트렌잭션을 지원해주지 않아 데이터 무결성을 보장하지 않기 때문에 개발자가 코드레벨에서 이에 대한 처리를 해주어야 한다는 단점이 존재한다.  (외래 키 생성도 불가하다.)

 

SELECT에 최적화되어있는 아주 가벼운 엔진

 

victorydntmd.tistory.com/129

 

[DB이론] 트랜잭션(transaction)과 ACID 특성을 보장하는 방법

1. 트랜잭션( transaction ) 트랜잭션이란 질의(query)를 하나의 묶음 처리해서 만약 중간에 실행이 중단됐을 경우, 처음부터 다시 실행하는 Rollback을 수행하고, 오류없이 실행을 마치면 commit을 하는

victorydntmd.tistory.com


InnoDB

한마디로 정의하자면 무겁고 느리다.

 

엔진 자체가 데이터 수정 작업에 특화되어있기 때문에 데이터 변경이 자주 일어나는 테이블인 경우 사용하기에 적합하다.

 

트렌잭션을 지원해주고 (COMMIT & ROLLBACK 지원) 이에 따라 데이터 무결성이 제공됨으로 MyISAM과 달리 무결성에 보장을 코드레벨에서 작성할 부담이 없다. (장애 복구, 외래 키 생성 가능)

 

UPDATE, DELETE에 최적화되어있는 무거운 엔진

 


Locking이란?

DB에 저장된 데이터의 무결성을 보호하기 위해서 MYSQL은 Locking을 사용한다.

간단히 말하자면 Locking은 데이터에 접근하지 못하도록 막는 것을 의미한다.

 

각각의 스토리지 엔진은 저 마다 다른 방법의 Locking을 사용한다.

가장 대표적인 Locking 두 가지 : Table locking, Row level Locking


Table locking

테이블의 하나 이상의 데이터가 업데이트 혹은 삭제할 때 전체 테이블을 Locking 하는 기술이다.

MYISAM이 사용하는 Locking 기술이기도 하다.

 

업데이트 되는 동안 전체 테이블을 locking하기 때문에 다른 쿼리들이 wait하는것을 볼 수 있다.

Row-Level Locking

특정 범위 안의 데이터가 변경 혹은 삭제할 때 해당 범위의 row들을 함께 Locking 하는 기술이다.

InnoDB가 사용하는 Locking 기술이기도 하다. 효율성을 중시하는 DB에서 사용된다.

특정 범위에 해당하는 row들을 모두 포함해서 Lock을 거는 것을 볼 수 있다.


MyISAM vs InnoDB

MyISAM은 쓰기 활동보다 훨씬 많은 읽기 활동이 필요한 대형 테이블에서 InnoDB보다 성능이 뛰어납니다.

만약 사용하는 application이 변경이 많이 일어나지 않는 거대한 테이블을 의존한다면 InnoDB를 사용하는 것보다 MyISAM를 사용하는 것이 효율적이다.

 

대조적으로 InnoDB는 데이터가 자주 변경되는 테이블에 적합합니다.

테이블의 데이터를 변경하는 것은 데이터를 읽는 것보다 초 당 더 많은 데이터를 소비합니다. 이러한 상황이라면  InnoDB는 전체 테이블을 Lock 하는 것보다 많은 양의 요청을 더 쉽게 처리할 수 있습니다.


References

https://www.liquidweb.com/kb/mysql-performance-myisam-vs-innodb/

 

MySQL Performance: MyISAM vs InnoDB | Liquid Web

InnoDB vs. MyISAM, we answer the question of which one is better for your application. Command line instructions on how to convert tables and storage engines.

www.liquidweb.com

needjarvis.tistory.com/45

 

[MySQL] MyISAM 와 InnoDB 비교

현재 하고 있는 프로젝트는 MySQL DB를 사용하고 있고, TA로 투입이 되면서 테이블을 설계 업무도 병행하게 되었다. (물론 다 하는건 아니었지만) 큰 그림을 그리는 작업을 하는 거라, 업무별 테이

needjarvis.tistory.com

hyoje420.tistory.com/39

 

[MySQL]Storage Engine(MyISAM vs InnoDB)

Storage Engine 먼저 MySQL에는 크게 두 가지의 엔진이 존재한다. 하나는 서버 엔진이고 하나는 스토리지 엔진이다. 서버 엔진은 쿼리 요청이 왔을 때 쿼리 파싱(Query parsing)을 하여 스토리지 엔진에

hyoje420.tistory.com

 

'CS > DataBase' 카테고리의 다른 글

(MySQL) Adaptive Hash Index  (0) 2020.03.08
(MySQL) ACID : 트랜잭션을 통한 동시성 제어  (0) 2020.03.08
(MySQL) Inno Storage 엔진  (0) 2020.02.16
(MySQL) MyISAM Storage 엔진  (0) 2020.02.16
(MySQL) 스토리지 엔진  (0) 2020.02.16