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