결론부터 말하면: 네, 가능합니다
MySQL에서는 하나의 데이터베이스 안에서 InnoDB와 MyISAM 테이블을 자유롭게 혼용할 수 있습니다. MySQL은 스토리지 엔진을 테이블 단위로 지정하는 구조이기 때문에, 같은 데이터베이스 내에서도 테이블마다 서로 다른 엔진을 사용하는 것이 전혀 문제되지 않으며, 오히려 용도에 맞게 엔진을 선택하는 것은 권장되는 방식이기도 합니다.
예를 들어 트랜잭션 처리와 외래 키 제약이 필요한 테이블은 InnoDB로, 읽기 위주의 빠른 성능이 중요한 로그성 테이블은 MyISAM으로 구성하는 식으로 활용할 수 있습니다.
실습 예제: 한 데이터베이스에 두 엔진 함께 사용하기
아래에서는 하나의 데이터베이스에 InnoDB 테이블과 MyISAM 테이블을 각각 생성하고, 실제로 어떤 엔진이 적용되었는지 확인해 보겠습니다.
1. 데이터베이스 생성
먼저 'BothInnoDBandMyISAM'이라는 이름의 데이터베이스를 생성하고 해당 데이터베이스를 사용하도록 설정합니다.
mysql> create database BothInnoDBandMyISAM;
Query OK, 1 row affected (0.20 sec)
mysql> use BothInnoDBandMyISAM;
Database changed
2. InnoDB 엔진으로 테이블 생성
첫 번째 테이블인 Student 테이블은 ENGINE=InnoDB 옵션을 명시하여 생성합니다.
mysql> create table Student
-> (
-> StudentId int,
-> StudentName varchar(20)
-> )ENGINE=InnoDB;
Query OK, 0 rows affected (1.20 sec)
3. MyISAM 엔진으로 테이블 생성
두 번째 테이블인 Employee 테이블은 ENGINE=MyISAM 옵션을 지정하여 생성합니다.
mysql> create table Employee
-> (
-> EmployeeId int,
-> EmployeeName varchar(30)
-> )ENGINE=MyISAM;
Query OK, 0 rows affected (0.28 sec)
테이블의 스토리지 엔진 확인하기
같은 데이터베이스에 속한 두 테이블이 실제로 서로 다른 엔진을 사용하는지 information_schema.tables 뷰를 통해 확인할 수 있습니다.
먼저 Student 테이블의 엔진 타입을 조회하는 쿼리입니다.
mysql> select engine from information_schema.tables where table_name='Student' and table_schema='BothInnoDBandMyISAM';
실행 결과는 다음과 같습니다.
+--------+
| ENGINE |
+--------+
| InnoDB |
+--------+
1 row in set (0.00 sec)
이번에는 Employee 테이블의 엔진 타입을 조회해 보겠습니다.
mysql> select engine from information_schema.tables where table_name='Employee' and table_schema='BothInnoDBandMyISAM';
실행 결과는 다음과 같습니다.
+--------+
| ENGINE |
+--------+
| MyISAM |
+--------+
1 row in set (0.00 sec)
마무리 정리
위 실습 결과에서 확인했듯이, 동일한 데이터베이스('BothInnoDBandMyISAM') 안에 InnoDB 테이블과 MyISAM 테이블이 공존할 수 있습니다. 참고로 MySQL 5.5 버전 이후에는 기본 스토리지 엔진이 InnoDB로 변경되었으므로, 별도로 ENGINE 옵션을 지정하지 않으면 테이블은 InnoDB로 생성됩니다. MyISAM을 사용하려면 위 예제처럼 테이블 생성 시 ENGINE=MyISAM을 명시적으로 지정해 주어야 합니다.