Programing

MySQL에서 InnoDB와 MyISAM은 무엇입니까?

crosscheck 2020. 8. 2. 17:25
반응형

MySQL에서 InnoDB와 MyISAM은 무엇입니까?


무엇 InnoDBMyISAMMySQL?


InnoDB및의 MYISAM스토리지 엔진입니다 MySQL.

이 두 가지는 잠금 구현이 다릅니다 InnoDB. 테이블의 특정 행을 MyISAM잠그고 전체 MySQL테이블을 잠급니다 .

DB에서 테이블을 작성하는 동안 MYISAMOR InnoDB제공하여 유형을 지정할 수 있습니다 .


보세요

InnoDBMyISAM

InnoDB는 MySQL AB에 의해 배포 된 모든 현재 바이너리에 표준으로 포함 된 MySQL 용 스토리지 엔진입니다. MySQL과 함께 사용할 수있는 다른 스토리지 엔진에 비해 주요 개선 사항은 ACID 호환 트랜잭션 지원입니다.

MyISAM은 5.5 1 이전의 MySQL 관계형 데이터베이스 관리 시스템 버전의 기본 스토리지 엔진입니다 . 이전 ISAM 코드를 기반으로하지만 유용한 확장 기능이 많이 있습니다. MyISAM의 주요 결함은 거래 지원이 없다는 것입니다. MySQL 5.5 이상 버전은 참조 무결성 제약 조건과 높은 동시성을 보장하기 위해 InnoDB 엔진으로 전환했습니다.


그들은 스토리지 엔진입니다.

http://dev.mysql.com/doc/refman/5.1/en/storage-engines.html

MyISAM : 기본 MySQL 스토리지 엔진 및 웹, 데이터웨어 하우징 및 기타 애플리케이션 환경에서 가장 많이 사용되는 엔진입니다. MyISAM은 모든 MySQL 구성에서 지원되며 기본적으로 다른 구성을 사용하도록 MySQL을 구성하지 않은 경우 기본 스토리지 엔진입니다.

InnoDB : 사용자 데이터를 보호하기위한 커밋, 롤백 및 충돌 복구 기능이있는 MySQL 용 트랜잭션 안전 (ACID 호환) 스토리지 엔진. InnoDB 행 수준 잠금 (더 세분화 된 잠금으로 에스컬레이션 없음) 및 Oracle 스타일의 일관된 비 잠금 읽기는 다중 사용자 동시성과 성능을 향상시킵니다. InnoDB는 기본 키를 기반으로 일반적인 쿼리에 대한 I / O를 줄이기 위해 사용자 데이터를 클러스터형 인덱스에 저장합니다. 데이터 무결성을 유지하기 위해 InnoDB는 FOREIGN KEY 참조 무결성 무결성 제약 조건도 지원합니다.


테이블 당 특정 스토리지 엔진을 지정할 수있는 기능이 MySQL의 주요 강점 중 하나입니다 (사용하기 쉬우면서도 성능 조정이 가능함). 트랜잭션이 필요한 모든 작업에 InnoDB를 사용하십시오. 그러나 MyISAM은 특정 상황에서 트랜잭션이 필요하지 않을 때 실제로 속도를 높일 수 있으며 InnoDB에 비해 디스크 공간과 RAM이 더 적습니다.

즉, InnoDB는 항상 향상되고 있습니다.

InnoDB 1.1 성능 및 확장 성 향상


MyISAM은 데이터 무결성을 유지하기 위해 트랜잭션을 따르는 InnoDB와 달리 ACID를 따르지 않습니다.

MyISAM은 동시 삽입을 지원합니다. 테이블에 데이터 파일 중간에 사용 가능한 블록이없는 경우 다른 스레드가 테이블에서 읽는 동안 새 행을 테이블에 삽입 할 수 있습니다. MySqlDoc

그렇기 때문에 MyISAM이 더 빠르고 공간을 덜 차지합니다. 예를 들어 MySQL MyISAM Storage Engine은 트랜잭션을 지원하지 않습니다. MySQL MYISAM 제약 조건 동시 삽입 이라는 비트 가 있습니다 . 기본적으로 변수는 1로 설정되고 동시 삽입은 방금 설명한대로 처리됩니다. 0으로 설정하면 동시 삽입이 비활성화됩니다. 2로 설정되면 행이 삭제 된 테이블의 경우에도 테이블 끝에 동시 삽입이 허용됩니다. INSERT 문을 실행하여 테이블 중간에 홀 / 삭제 된 행이없는 경우 (동시 삽입시) 동시에 select를 사용하여 테이블 끝에 행을 추가 할 수 있습니다.

mysql InnoDB의 기본 격리 수준은 "반복 가능 읽기"입니다. MyISAM의 경우 거래가 없습니다. InnoDB는 행 수준 잠금을 사용하는 반면 MyISAM은 테이블 수준 잠금 만 사용할 수 있으므로 InnoDB의 충돌 전환이 MyISAM보다 낫습니다. 동시성 효과를 피하려면 MyISAM에서 테이블 레벨 잠금수동으로 가져와야합니다.


InnoDB는 기본 NOT myISAM입니다 https://dev.mysql.com/doc/refman/5.7/en/innodb-introduction.html "InnoDB는 기본 MySQL 스토리지 엔진입니다. 다른 기본 스토리지 엔진을 구성하지 않은 경우 ENGINE = 절이없는 CREATE TABLE 문은 InnoDB 테이블을 작성합니다. "


MySQL 서버가 충돌하면 큰 InnoDB 트랜잭션 파일보다 MyISAM 테이블 세트에서 데이터를 훨씬 쉽게 복구 할 수 있습니다. 각 MyISAM 테이블에는 별도의 파일이 있으며 충돌하는 동안이 테이블에 대한 쓰기 작업이 없으면 완전히 영향을받지 않습니다. InnoDB의 경우 전체 MySQL 서버의 전체 트랜잭션 파일을 다시 인덱싱하거나 충돌 후 수행하는 모든 작업을 다시 색인화해야합니다. 꽤 지저분해질 수 있습니다.


InnoDB 는 MySQL의 트랜잭션 스토리지 엔진이며 MyISAM 은 비 트랜잭션 스토리지 엔진입니다. 즉, InnoDB는 ACID 속성을 따라 데이터의 무결성을 유지하지만 MyISAM은 ACID 속성을 따르지 않으므로 데이터의 무결성을 유지하지 못합니다.

InnoDB (트랜잭션) 테이블에서 롤백이 필요한 경우 트랜잭션 변경을 쉽게 취소 할 수 있습니다. 그러나 트랜잭션 롤백이 필요한 경우 MyISAM (트랜잭션이 아닌) 테이블에 대한 변경 사항을 취소 할 수 없습니다.

예를 들어, 당좌 계좌에서 저축 계좌로 돈을 이체하려고합니다. 이것은 5 개의 쿼리를 포함하는 트랜잭션에 의해 수행됩니다.

1 START TRANSACTION;
2 SELECT balance FROM checking WHERE customer_id = 10233276;
3 UPDATE checking SET balance = balance - 200.00 WHERE customer_id = 10233276;
4 UPDATE savings SET balance = balance + 200.00 WHERE customer_id = 10233276;
5 COMMIT;

4 단계에서 프로세스가 중단되었다고 가정합니다. InnoDB 테이블을 여기에서 사용한 경우 롤백으로 변경 내용이 취소되고 돈을 잃을 위험이 없습니다. 말 그대로 5 단계가 성공적으로 실행되지 않으면 변경 내용이 테이블에 커밋되지 않으므로 테이블이 충돌을 인식하지 못합니다.

그러나 MyISAM 테이블의 경우 롤백이 호출되거나 트랜잭션 실패로 이어지는 충돌이있는 경우 트랜잭션 변경을 취소 할 수 없습니다. 즉, 3 단계에서 거래가 중단되면 당좌 계좌에서 금액이 차감됩니다. 그러나 저축 계좌에는 돈이 추가되지 않았을 것입니다.

예의 예 : "고성능 MySQL : 최적화, 백업 및 복제"-Arjen Lentz, Derek J. Balling, Jeremy Zawodny, Peter Zaitsev 및 Vadim Tkachenko가 예약

참고 URL : https://stackoverflow.com/questions/3818759/what-is-innodb-and-myisam-in-mysql

반응형