-.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 => 테이블 생성 확인