- 트랜잭션을 지원하느냐의 차이 
MyISAM과 InnoDB를 구분하는 가장 큰 특징은 트랜잭션 관리 지원 유무로 볼 수 있을 것 같다. 

즉 트랜잭션처리가 필요하고 높은 퍼포먼스를 요구하는 대용량 사이트 등에서는 InnoDB 사용이 효율적이고, 반면 트랜잭션 처리가 필요없고, 주로 DB 조회(read) 작업이 많은 소규모 사이트인 경우 MyISAM이 효율적일 것이다. 

http://blog.naver.com/leeyangachi?Redirect=Log&logNo=30035817140 " MySQL 스토리지 엔진 MyISAM과 InnoDB의 차이점" 

http://blog.naver.com/paradox1573?Redirect=Log&logNo=40027258413 "MyISAM과 InnoDB의 차이점과 성능비교" 

대표적으로 MyISAM과 InnoDB가 많이 사용되며, 
MyISAM은 주료 SELECT가 많은 업무에 효과적이며, 
InnoDB는 데이터 변경이 많은 업무에 효과적입니다 

MyISAM은 속도가 빠른반면 transaction을 지원하지 않고, 
InnoDB는 속도가 느린반면 transaction을 지원합니다 

MyISAM에서는 transaction을 지원하지 않기 때문에 commit을 하지 않아도 자동 오토커밋입니다 
transaction을 사용하기 위해서는 InnoDB를 사용해야 합니다. 
[출처] 
http://tarrega.springnote.com/pages/4306441 

■ innodb 
Datafile 
데이타량이 많을 경우 MyISAM에 비해 빠르다고 함.  (Select는 빠르고 insert, update는 느리다고 함) 
shared datafile (인덱스와 데이터 공간이 공유) 
innodb_file_per_table를 설정하면 테이블 단위의 데이터 파일로 분리가 된다. 

그러나 테이블 정보는 메인 shared datafile에 저장된다. 
MyIsam에 비해 약 1.5~2.5배 정도 파일이 커짐 
데이터 량이 감소하더라도 증가된 테이터 파일 사이즈는 그대로임. 
(optimize table '테이블'을 수행하면 리사이징 된다.) 

Transaction 
ib_logfileN log파일을 통하여 대량의 트랜젝션을 버퍼링하고 serialization을 한다. 
로그파일은 최소 2개의 그룹이며, 서로 rotate 스위칭되며 갱싱되 데이터를 파일로 적용한다. 
Trasaction 이외에 Foreign Key, Trigger 를 지원 

속도 
인덱스와 데이타 파일이 같은 파일에 있어 속도가 느리다. 

대량의 insert, update가 일어 나면 fragment가 발생되어 더 느려진다. 

백업 
테이블 단위의 hot backup(파일복사)가 불가능하고, 
mysqldump나 db전체적인 복사가 필요하다. 
백업에 반드시 메인 sharedDB파일도 같이 이루어 져야한다. 

기타 특징 
SELECT COUNT(*)시 일일히 테이블의 레코드 수를 구한다고 함.(현재 버전도?) 
행(Row)단위 Lock을 사용 


■ MyISAM 
Datafile 
인덱스(.MYI)와 데이터 파일(.MYD)가 분리 
innodb보다 파일 크기가 작다. 

Transaction 
테이블 락을 기본으로 insert, update, delete가 이루어 진다. 

속도 
인덱스와 데이터 파일이 테이블 단위 이므로 속도가 빠르다. 

백업 
테이블 단위의 hot backup(파일 복사)을 할 수 있다. 
테이블 파일만 있더라도 복구가 가능하다. 

기타 특징 
Table단위 Lock사용 
COUNT(*) 정보를 별도 저장 

[출처] 
http://mulder3062.springnote.com/pages/1925054 



■ ISAM(Indexed Sequential Access Method) 
빠른 데이터 검색을 위한 파일 시스템 구조이다. 
IBM 메인프레임 컴퓨터를 위해 개발되었으며, 관계형 데이터베이스 등에서 저장 구조로 활용되고 있다. 

MySQL은 현재 MyISAM,ISAM,BDB,InnoDB,HEAP,Marge 타입의 테이블을 지원합니다. 
ISAM은 3.22이하 버전에서 MySQL에서 사용되던 타입이고, 
MyISAM은 ISAM의 단점을 보완한 업그레이드 버전이다. 


// 

- 디폴트로 생성되는 MyISAM 타입 
MySQL Version 3.23 부터 테이블 타입에 
MyISAM type 과 ISAM type 을 모두 지원합니다. 
기존 ISAM type을 사용할 수 있으며, 기본적으로 새로운 테이블은 MyISAM type 으로 생성됩니다. 
(mysqld 실행시 --default-table-type=isam 옵션을 주지 않았을 때) 

- DB를 구성하는 확장자 
ISAM 의 확장자는 .frm  .ISD .ISM 
MyISAM 의 확장자는 .frm .MYD .MYI  이다. 

- 지원되는 테이블 사이즈 
ISAM type 에서 하나의 table size 4 Gb 까지 지원되던게, 
MyISAM type 에서 800만 Tb 까지 가능하답니다. 
물론 Linux ext2 fs 에서 파일 하나의 size 가 최대 2 Gb 이므로 size 에 서 느끼는 차이는 없을 듯. 

-  ISAM 에서 MyISAM 으로 변환 
ISAM table 을 MyISAM table 로 변환이 가능합니다. 
(ALTER TABLE 을 이용하거나, 펄 스크립트 mysql_convert_table_format 
를 이용.) 
사용법 : ./mysql_convert_table_format database [tables] 
보통 mysql_convert_table_format 스크립트는 /usr/local/mysql/bin 에 존재


- 테이블 존재 확인
SHOW TABLES LIKE [테이블 명]

있을 경우 테이블 정보 
없을 경우 Empty


- 필드 존재 확인
SHOW COLUMNS FROM [테이블 명] LIKE '필드명'

있을 경우 필드 정보
없을 경우 Empty 



 - 테이블 생성 하기(기본)
CREATE [테이블 명] (
   [필드 명] Varchar(크기), 
   [필드 명] float,   
   [필드 명] INT,
   [필드 명] Mediumtext
)

- 테이블에 필드 추가하기

ALTER TABLE [테이블 명] ADD [필드 명] Varchar(크기)
ALTER TABLE [테이블 명] ADD [필드 명] float
ALTER TABLE [테이블 명] ADD [필드 명] INT
ALTER TABLE [테이블 명] ADD [필드 명] Mediumtext

- 테이블 존재 확인
select * from sysobjects where name = [테이블명]

있을 경우 테이블 정보 
없을 경우 Empty


- 필드 존재 확인

select * from INFORMATION_SCHEMA.COLUMNS where table_name=[테이블 명] 
                                                                        and column_name=[필드 명]
있을 경우 필드 정보
없을 경우 Empty 



 - 테이블 생성 하기(기본)
CREATE [테이블 명] (
   [필드 명] Varchar(크기), 
   [필드 명] float,   
   [필드 명] INT,
   [필드 명] Mediumtext
)

- 테이블에 필드 추가하기

ALTER TABLE [테이블 명] ADD [필드 명] Varchar(크기)
ALTER TABLE [테이블 명] ADD [필드 명] float
ALTER TABLE [테이블 명] ADD [필드 명] INT
ALTER TABLE [테이블 명] ADD [필드 명] Mediumtext





+ Recent posts