MySQL에는 여러 스토리지 엔진이 있으며, MyISAM과 InnoDB는 일반적으로 사용되는 두 가지 엔진입니다. 다음은 이 두 엔진에 대한 몇 가지 기본 개념입니다(자세한 소개는 아님).
MyISAM은 MySQL의 기본 스토리지 엔진으로 기존 ISAM 유형을 기반으로 하며 전체 텍스트 검색을 지원하지만 트랜잭션에 안전하지 않으며 외래 키를 지원하지 않습니다. 각 MyISAM 테이블은 세 개의 파일에 저장됩니다. frm 파일은 테이블 정의를 저장하고, 데이터 파일은 MYD(MYData)이고, 인덱스 파일은 MYI(MYIndex)입니다.
InnoDB는 롤백, 크래시 복구, 다중 버전 동시성 제어, ACID 트랜잭션, 행 수준 잠금(InnoDB 테이블의 행 잠금은 절대적이지 않음)을 지원하는 트랜잭션 엔진입니다. MySQL의 경우 범위가 스캔할 것인지 결정할 수 없는 경우 InnoDB 테이블은 유사한 작업 중에 SQL 문과 같은 전체 테이블도 잠급니다. InnoDB는 여러 파일을 포함할 수 있는 테이블스페이스에 테이블과 인덱스를 저장합니다.
주요 차이점:
MyISAM은 트랜잭션에 안전하지 않은 반면 InnoDB는 트랜잭션에 안전합니다.
MyISAM 잠금의 세분성은 테이블 수준인 반면 InnoDB는 행 수준 잠금을 지원합니다.
MyISAM은 전체 텍스트 형식의 인덱스를 지원하지만 InnoDB는 전체 텍스트 인덱스를 지원하지 않습니다.
MyISAM은 상대적으로 단순하므로 효율성 측면에서 InnoDB보다 낫습니다. 소규모 애플리케이션에서는 MyISAM 사용을 고려할 수 있습니다.
MyISAM 테이블은 파일로 저장됩니다. 크로스 플랫폼 데이터 전송에 MyISAM 스토리지를 사용하면 많은 문제를 줄일 수 있습니다.
InnoDB 테이블은 MyISAM 테이블보다 더 안전합니다. 데이터가 손실되지 않도록 하면서 비트랜잭션 테이블을 트랜잭션 테이블로 전환할 수 있습니다(alter table tablename type=innodb).
애플리케이션 시나리오:
MyISAM은 비트랜잭션 테이블을 관리합니다. 고속 저장 및 검색은 물론 전체 텍스트 검색 기능도 제공합니다. 애플리케이션이 많은 수의 SELECT 쿼리를 수행해야 하는 경우 MyISAM이 더 나은 선택입니다.
InnoDB는 트랜잭션 처리 애플리케이션에 사용되며 ACID 트랜잭션 지원을 포함한 다양한 기능을 갖추고 있습니다. 애플리케이션이 많은 수의 INSERT 또는 UPDATE 작업을 수행해야 하는 경우 다중 사용자 동시 작업의 성능을 향상시킬 수 있는 InnoDB를 사용해야 합니다.