-.1 MyISAM 과 InnoDB 엔진 비교

 

 

1. InnoDB가 유리한 경우

  • 대용량의 데이터를 컨트롤 하는 경우

  • 트랜잭션 관리가 필요한 경우 

  • 복구가 필요한 경우

  • order by 등 정렬이 필요한 경우

  • insert , update , delete 등이 빈번하게 발생하는 경우 (Row-level locking)

 

2. MyISAM 이 유리한 경우

  • select 위주의 작업만 필요한 경우

  • 전문 검색이 필요한 경우

  • 트랜잭션이나 복구등이 필요없을 경우

  • 한번에 대량의 데이터를 입력하는 배치성 테이블

 

-2. InnoDB 에서 MyISAM 으로 변경하는 이유

=> 오래된 mysql 버전에서는 MyISAM 이 default Engine 으로 사용되었고

I/O 가 빠르다는 장점과  sequence 를 지원하지 않는 mysql의 특성 때문에 MyISAM 를 사용하는 시스템이 많았음.

그러나 Row-level locking 인 InnoDB에 비해 Table-level locking 인 MyISAM 은 dml이 많은 시스템에선 한계가 있고

거듭된 향상으로 InnoDB의 속도도 MyISAM 과 차이없을 만큼 빨라지는 등 특별한 이유가 아니면 InnoDB 사용이 권장됨

 

-3. 변경 방법 

1. alter table 테이블명 engine=innodb;

mysql> show create table myisam_test.myisam_table_1\G;
*************************** 1. row ***************************
       Table: myisam_table_1
Create Table: CREATE TABLE "myisam_table_1" (
  "num" int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin
1 row in set (0.00 sec)

ERROR:
No query specified

mysql> alter table myisam_test.myisam_table_1 engine=innodb;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show create table myisam_test.myisam_table_1\G;
*************************** 1. row ***************************
       Table: myisam_table_1
Create Table: CREATE TABLE "myisam_table_1" (
  "num" int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin

 

2. 기존 테이블들을 덤프 뜬 후 새로 innodb 로 생성하는 방법

 mysqldump -uroot -p myisam_test -S /engn001/masvc01/TEST/mysql/mysql.sock > test.sql
Enter password:
=> # mysqldump -u계정 -p db명 -S 소켓명 > 덤프파일명

sed -e 's/ENGINE=MyISAM/ENGINE=InnoDB/g' test.sql > test2.sql
=> 덤프파일 내용중 engine=MyISAM 을 한번에 Engine=InnoDB 로 변경

mysql -uroot -p myisam_test < test2.sql
Enter password:
=> mysql -u계정 -p db명 < 적용할 덤프파일명

mysql> show tables from myisam_test;
+-----------------------+
| Tables_in_myisam_test |
+-----------------------+
| myisam_table_1        |
+-----------------------+
1 row in set (0.00 sec)

mysql> show create table myisam_test.myisam_table_1\G;
*************************** 1. row ***************************
       Table: myisam_table_1
Create Table: CREATE TABLE "myisam_table_1" (
  "num" int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
1 row in set (0.00 sec)

ERROR:
No query specified
=> 테이블 생성 확인