이 기사의 내용은 MySQL에서 일반적으로 사용되는 스토리지 엔진에 대한 것입니다. 이는 특정 참고 가치가 있으므로 도움이 될 수 있습니다.
MyISAM: 각 MyISAM은 디스크에 세 개의 파일로 저장됩니다. 첫 번째 파일의 이름은 테이블 이름으로 시작하고 확장자는 파일 형식을 나타냅니다. .frm 파일은 테이블 정의를 저장합니다. 데이터 파일의 확장자는 .MYD
(MYData)입니다. 인덱스 파일의 확장자는 .MYI(MYIndex)입니다.MyISAM은 초기 ISAM(Indexed Sequential Access Method: Indexed Sequential Access Method)을 개선한 MySQL(5.5 이전 버전)의 기본 데이터베이스 엔진입니다. 성능은 뛰어나지만 트랜잭션 처리를 지원하지 않는다는 단점이 있습니다.
InnoDB는 MySQL의 데이터베이스 엔진 중 하나이며 MySQL AB에서 발표한 바이너리 표준 중 하나입니다. 기존 ISAM, MyISAM과 비교했을 때 InnoDB의 가장 큰 특징은 트랜잭션을 지원한다는 점이다.
MyISAM과 InnoDB의 차이점은 무엇인가요? 요약하면 다음과 같습니다.
1. 저장 구조
MyISAM: 각 MyISAM은 디스크에 3개의 파일로 저장됩니다. 첫 번째 파일의 이름은 테이블 이름으로 시작하고 확장자는 파일 형식을 나타냅니다. .frm 파일은 테이블 정의를 저장합니다. 데이터 파일 확장자는 .MYD(MYData)입니다. 인덱스 파일의 확장자는 .MYI(MYIndex)입니다.
InnoDB: 모든 테이블은 동일한 데이터 파일(또는 여러 파일 또는 독립적인 테이블 공간 파일)에 저장됩니다. InnoDB 테이블의 크기는 일반적으로 2GB인 운영 체제 파일 크기에 의해서만 제한됩니다.
2. 저장 공간
MyISAM: 압축이 가능하며 저장 공간이 더 작습니다. 세 가지 다른 저장 형식을 지원합니다: 정적 테이블(기본값이지만 데이터 끝에 공백이 없어야 하므로 제거됩니다.), 동적 테이블 및 압축 테이블.
InnoDB: 더 많은 메모리와 스토리지가 필요하며 데이터 및 인덱스 캐싱을 위해 메인 메모리에 자체 전용 버퍼 풀을 설정합니다.
3. 이식성, 백업 및 복구
MyISAM: 데이터가 파일 형식으로 저장되므로 플랫폼 간 데이터 전송에 매우 편리합니다. 백업 및 복구 중에 테이블에 대한 작업을 개별적으로 수행할 수 있습니다.
InnoDB: 무료 솔루션에는 데이터 파일 복사, binlog 백업 또는 mysqldump 사용이 포함되는데, 이는 데이터 볼륨이 수십 기가바이트에 도달하면 상대적으로 고통스럽습니다.
4. 트랜잭션 지원
MyISAM: 각 쿼리는 원자적이고 실행 시간이 InnoDB 유형보다 빠르지만 트랜잭션 지원을 제공하지 않습니다.
InnoDB: 트랜잭션 지원, 외래 키 및 기타 고급 데이터베이스 기능을 제공합니다. 트랜잭션(커밋), 롤백(롤백) 및 충돌 복구 기능을 갖춘 트랜잭션 안전(ACID 호환) 테이블입니다.
5. AUTO_INCREMENT
MyISAM: 다른 필드와 공동 인덱스를 만들 수 있습니다. 엔진의 자동 증가 열은 인덱스여야 합니다. 결합된 인덱스인 경우 자동 증가 열은 첫 번째 열일 필요는 없습니다. 이전 열을 기준으로 정렬하고 증분할 수 있습니다.
InnoDB: InnoDB에는 이 필드만 있는 인덱스가 포함되어야 합니다. 엔진의 자동 증가 열은 인덱스여야 하며, 복합 인덱스인 경우에는 복합 인덱스의 첫 번째 열이기도 해야 합니다.
6. 테이블 잠금 차이점
MyISAM: 사용자가 myisam 테이블을 작동할 때 잠긴 테이블이 삽입 동시성을 충족하면 자동으로 테이블을 잠급니다. 이 경우 테이블 끝에 새 데이터를 삽입할 수 있습니다.
InnoDB: 트랜잭션 및 행 수준 잠금을 지원하는 것은 innodb의 가장 큰 기능입니다. 행 잠금은 다중 사용자 동시 작업의 성능을 크게 향상시킵니다. 그러나 InnoDB의 행 잠금은 WHERE의 기본 키에서만 유효합니다. 기본 키가 아닌 WHERE는 전체 테이블을 잠급니다.
7. 전체 텍스트 인덱스
MyISAM: FULLTEXT 유형 전체 텍스트 인덱스를 지원합니다.
InnoDB: FULLTEXT 유형 전체 텍스트 인덱스를 지원하지 않지만 innodb는 스핑크스 플러그인을 사용하여 전체 텍스트 인덱싱을 지원할 수 있습니다. , 효과가 더 좋습니다.
8. 테이블 기본 키
MyISAM: 인덱스가 없는 테이블과 기본 키가 존재하도록 허용합니다. 인덱스는 행이 저장되는 주소입니다.
InnoDB: 기본 키 또는 비어 있지 않은 고유 인덱스가 설정되지 않은 경우 6바이트 기본 키(사용자에게 표시되지 않음)가 자동으로 생성됩니다. 데이터는 기본 인덱스의 일부이며 추가 인덱스는 값을 저장합니다. 기본 인덱스의
9. 테이블의 특정 행 수
MyISAM: 테이블의 총 행 수를 저장합니다. 테이블에서 count()를 선택하면 값이 직접 제거됩니다.
InnoDB: 테이블의 총 행 수는 저장되지 않습니다. 테이블에서 select count()를 사용하면 전체 테이블을 탐색하므로 많은 비용이 소모됩니다. 그러나 wehre 조건을 추가한 후에는 myisam 및 innodb도 같은 방식으로 처리합니다.
10.CURD 연산
MyISAM: SELECT를 많이 수행한다면 MyISAM이 더 나은 선택입니다.
InnoDB: 데이터가 INSERT 또는 UPDATE를 많이 수행하는 경우 성능상의 이유로 InnoDB 테이블을 사용해야 합니다. DELETE는 InnoDB보다 성능면에서는 우수하지만 DELETE FROM 테이블을 실행하면 InnoDB는 테이블을 다시 생성하지 않고 행 단위로 삭제합니다. InnoDB에서 많은 양의 데이터가 있는 테이블을 지우려면 truncate table 명령을 사용하는 것이 가장 좋습니다.
11. 외래 키
MyISAM: 지원되지 않음
InnoDB: 지원됨
위의 분석을 통해 기본적으로 InnoDB를 사용하여 MyISAM 엔진을 대체하는 것을 고려할 수 있지만 실제 응용에서는 구체적인 상황을 직접 고려할 수 있습니다. .
위 내용은 MySQL에서 일반적으로 사용되는 스토리지 엔진 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!