Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 MyISAM vs InnoDB: 차이점과 엔진 확인·변경 방법

MySQL에서 MyISAM과 InnoDB란?

MyISAM과 InnoDB는 모두 MySQL에서 사용할 수 있는 스토리지 엔진(storage engine)입니다. 두 엔진은 내부 동작 방식과 제공하는 기능에서 큰 차이가 있으며, 어떤 엔진을 선택하느냐에 따라 데이터베이스의 성능과 안정성이 달라질 수 있습니다.

두 엔진의 주요 차이점

  • InnoDB: 트랜잭션(ACID) 지원, 외래 키(Foreign Key) 지원, 행 수준 잠금(Row-Level Locking), 우수한 크래시 복구 기능 제공
  • MyISAM: 트랜잭션 미지원, 테이블 수준 잠금(Table-Level Locking), 구조가 단순하여 읽기 위주 작업에서 빠른 성능 발휘

현재 사용 중인 엔진 확인 방법

먼저 USE 명령어로 확인하고자 하는 데이터베이스를 선택합니다.

mysql> USE business;
Database changed

다음으로 아래 쿼리를 실행하면 각 테이블이 어떤 엔진을 사용 중인지 확인할 수 있습니다.

mysql> SHOW TABLE STATUS;

실행 결과 예시는 다음과 같습니다(주요 컬럼만 발췌).

+---------------------+--------+---------+------------+------+--------------------+
| Name | Engine | Version | Row_format | Rows | Collation |
+---------------------+--------+---------+------------+------+--------------------+
| addcolumntable | InnoDB | 10 | Dynamic | 0 | utf8mb4_0900_ai_ci |
| autoincrement | InnoDB | 10 | Dynamic | 4 | utf8mb4_unicode_ci |
| autoincrementtable | InnoDB | 10 | Dynamic | 5 | utf8mb4_unicode_ci |
| bookindexes | InnoDB | 10 | Dynamic | 4 | utf8mb4_unicode_ci |
| chardemo | InnoDB | 10 | Dynamic | 0 | utf8mb4_0900_ai_ci |
| clonestudent | InnoDB | 10 | Dynamic | 3 | utf8mb4_unicode_ci |
+---------------------+--------+---------+------------+------+--------------------+

결과를 보면 MySQL 8.0.12 버전에서는 모든 테이블이 기본적으로 "InnoDB" 엔진을 사용하고 있음을 알 수 있습니다. 물론 필요에 따라 엔진을 MyISAM으로 변경하는 것도 가능합니다.

InnoDB에서 MyISAM으로 엔진 변경하기

여러 테이블의 엔진을 한 번에 변경하려면 information_schema.TABLES를 조회해 ALTER TABLE 문을 자동으로 생성하는 방법이 유용합니다.

mysql> SELECT CONCAT('ALTER TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ' ENGINE=MyISAM;')
-> FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'sample' AND ENGINE
-> = 'InnoDB' AND TABLE_TYPE = 'mytable';
Empty set (0.05 sec)

이 쿼리는 'sample' 데이터베이스에서 InnoDB 엔진을 사용하는 테이블을 찾아, 각 테이블을 MyISAM으로 변환하는 ALTER TABLE 문장을 생성합니다. 참고로 TABLE_TYPE 조건에는 일반적으로 'BASE TABLE'(일반 테이블) 값을 사용해야 하며, 위 예제에서는 'mytable'이라는 잘못된 값 때문에 결과가 비어 있는(Empty set) 상태로 출력된 것입니다.

생성된 ALTER TABLE 문을 그대로 실행하면 해당 테이블들의 엔진이 MyISAM으로 변경됩니다. 단일 테이블만 변경할 경우에는 아래처럼 직접 실행할 수도 있습니다.

mysql> ALTER TABLE 테이블명 ENGINE=MyISAM;

마무리

MySQL 8.0부터는 기본 엔진이 InnoDB이며, 대부분의 경우 트랜잭션과 데이터 무결성을 지원하는 InnoDB 사용이 권장됩니다. MyISAM은 읽기 위주의 단순한 워크로드에서 여전히 유용하지만, 트랜잭션 처리나 외래 키 제약이 필요하다면 InnoDB를 선택하는 것이 바람직합니다.