>데이터 베이스 >MySQL 튜토리얼 >[MySQL] MySQL 스토리지 엔진

[MySQL] MySQL 스토리지 엔진

黄舟
黄舟원래의
2017-02-25 10:23:531007검색


테이블을 생성할 때 테이블의 스토리지 엔진인 테이블의 유형을 지정할 수 있습니다. 테이블의 스토리지 엔진은 데이터가 저장되고 액세스되는 방식과 트랜잭션이 저장되는 방식을 결정합니다. 테이블의 스토리지 엔진은 SQL 문을 처리하는 데 필요한 스토리지 공간과 속도에 큰 영향을 미칩니다. 다양한 스토리지 엔진은 서로 다른 특성을 가지고 있습니다. 일부 스토리지 엔진은 많은 복잡한 SELECT 문을 처리하는 데 매우 적합한 반면, 다른 스토리지 엔진은 빠른 업데이트를 달성하는 데 더 적합합니다.

InnoDB

InnoDB는 MySQL의 기본 트랜잭션 엔진이자 가장 중요하고 널리 사용되는 스토리지 엔진입니다. 다수의 단기 트랜잭션을 처리하도록 설계되었습니다. 단기 트랜잭션은 대부분의 경우 정상적으로 제출되며 거의 롤백되지 않습니다. InnoDB의 성능과 자동 충돌 복구 기능은 비트랜잭션 스토리지 요구 사항에 널리 사용됩니다.

다른 스토리지 엔진을 사용해야 하는 아주 특별한 이유가 없는 한 InnoDB 엔진을 우선적으로 사용해야 합니다. ————"고성능 MySQL"

  • InnoDB는 MVCC를 사용하여 높은 동시성을 지원하고 4가지 표준 격리 수준을 구현합니다. 기본 수준은 REPEATABLE READ이며 간격 잠금 전략은 팬텀 읽기를 방지합니다.

  • InnoDB는 클러스터형 인덱스 기반의

  • 이 외래 키 제약 조건을 지원함을 나타냅니다.

  • 열 AUTO_INCREMENT 속성의 자동 추가를 지원합니다.

  • 업무. InnoDB 스토리지 엔진은 트랜잭션을 지원하는 표준 MySQL 스토리지 엔진입니다.

  • 인덱스를 삭제하거나 추가할 때 테이블 데이터 전체를 복사할 필요가 없습니다.

InnoDB는 디스크에서 데이터를 읽을 때 예측 가능한 미리 읽기, 메모리에 해시 인덱스를 자동으로 생성하여 작업 속도를 높이는 등 다양한 내부 최적화를 수행했습니다. 삽입 작업 속도를 높이는 삽입 버퍼입니다.

InnoDB 테이블은 클러스터형 인덱스를 기반으로 구축됩니다. InnoDB의 인덱스 구조는 다른 MySQL 엔진과 매우 다릅니다. 클러스터형 인덱스는 기본 키 쿼리에 대한 성능이 높습니다. 그러나 보조 인덱스에는 기본 키 열이 포함되어야 하므로 기본 키 열이 크면 다른 모든 인덱스도 커집니다. 따라서 테이블에 인덱스가 많으면 기본 키는 최대한 작아야 합니다.

MyISAM

MyISAM은 전체 텍스트 인덱싱, 압축, 공간 함수(GIS) 등을 포함한 많은 기능을 제공하지만 MyISAM은 트랜잭션 및 행 수준 잠금을 지원하지 않습니다. 그리고 충돌 후에는 안전하게 복원할 수 없다는 것이 단점입니다. MySQL 5.1 및 이전 버전에서는 MyISAM이 기본 스토리지 엔진입니다. MySQL이 오랫동안 트랜잭션을 지원했음에도 불구하고 MySQL은 여전히 ​​많은 사람들이 생각하는 비트랜잭션 데이터베이스입니다.

  • MyISAM은 행이 아닌 전체 테이블을 잠급니다.

  • 전체 텍스트 색인 생성을 지원합니다.

  • 압축 테이블을 지원합니다. 압축된 테이블은 수정할 수 없으며 디스크 공간 사용량을 크게 줄여 디스크 I/O 작업을 줄이고 쿼리 성능을 향상시킬 수 있습니다.

저장소

MyISAM은 테이블을 두 개의 파일, 즉 데이터 파일과 인덱스 파일에 각각 .MYD 및 .MYI 확장자로 저장합니다. MyISAM 테이블에는 동적 또는 정적 행이 포함될 수 있습니다. MySQL은 테이블 정의에 따라 사용할 행 형식을 결정합니다.
MyISAM 테이블에 가변 길이 행이 있는 경우 기본 구성에서는 256TB의 데이터만 처리할 수 있습니다.

특징

MySQL의 최초 스토리지 엔진 중 하나로, 아직 몇 가지 기능이 있습니다.

잠금 및 동시성 – 테이블 잠금

MyISAM은 행이 아닌 전체 테이블을 잠급니다. 읽기 시에는 읽어야 하는 모든 테이블에 공유 잠금이 추가되고, 쓰기 시에는 테이블에 배타적 잠금이 추가됩니다. 그러나 테이블에 읽기 쿼리가 있는 동안 새 레코드를 테이블에 삽입할 수도 있습니다(동시 삽입).

복구

MyISAM 테이블의 경우 MySQL은 검사 및 유지 관리 작업을 수동 또는 자동으로 수행할 수 있지만 여기서 언급하는 복구는 트랜잭션 복구 및 충돌 복구와는 다른 개념입니다.

인덱스 기능

MyISAM 테이블의 경우 BLOB 및 TEXT와 같은 긴 필드도 처음 500자를 기반으로 인덱스를 생성할 수 있습니다. MyISAM은 또한 단어 분할을 기반으로 생성된 인덱스인 전체 텍스트 인덱싱을 지원하며 복잡한 쿼리를 지원할 수 있습니다.
인덱스 키 업데이트 지연
MyISAM 테이블을 생성할 때 DELAY_KEY_WRITE 옵션을 지정하면 수정된 인덱스 데이터가 각 수정이 완료될 때 즉시 디스크에 기록되지 않습니다.
 

MyISAM 성능

MyISAM 엔진은 단순하게 설계되었으며 데이터가 컴팩트한 형식으로 저장되므로 특정 시나리오에서의 성능이 매우 좋습니다. 그러나 테이블 잠금의 존재는 성능에 큰 영향을 미칩니다.

아카이브 엔진

아카이브 스토리지 엔진은 INSERT와 SELECT만 지원합니다. 아카이브 엔진은 모든 쓰기를 캐시하고 zlib를 사용하여 삽입을 압축하므로 MyISAM 테이블보다 디스크 I/O가 덜 필요합니다. 그러나 모든 SELECT 쿼리는 전체 테이블 스캔을 수행해야 합니다. 따라서 Archive 테이블은 데이터 분석을 위해 전체 테이블 스캔이 필요한 로그 및 데이터 수집 애플리케이션에 적합합니다.

아카이브 엔진은 행 수준 잠금 및 전용 버퍼를 지원하므로 동시성 높은 삽입이 가능합니다. 아카이브는 일관된 읽기를 달성하기 위해 쿼리가 시작되기 전에 테이블에 존재하는 모든 행이 반환될 때까지 다른 SELECT가 실행되지 않도록 합니다. 또한 읽기 작업이 완료될 때까지 보이지 않는 일괄 삽입도 구현됩니다. 이 메커니즘은 트랜잭션 및 MVCC의 일부 기능을 모방하지만 아카이브 엔진은 트랜잭션 엔진이 아니라 고속 삽입 및 압축에 최적화된 엔진입니다.

CSV 스토리지 엔진

이 엔진은 일반 CSV 파일을 MySQL 테이블로 처리할 수 있지만, 이 테이블은 인덱스를 지원하지 않습니다. CSV 파일을 CSV 스토리지 엔진의 데이터 디렉터리에 복사하기만 하면 되며, MySQL에 나열된 규칙을 사용하여 열고 사용할 수 있습니다.

메모리 엔진

데이터에 빠르게 액세스해야 하고, 다시 시작한 후에도 데이터가 수정되거나 손실되지 않는 경우 메모리 테이블을 사용하는 것이 매우 유용합니다. 메모리 테이블은 모든 데이터가 메모리에 저장되고 디스크 I/O 작업이 필요하지 않기 때문에 MyISAM 테이블보다 훨씬 빠릅니다. 다시 시작한 후에도 메모리 테이블의 구조는 유지되지만 데이터는 손실됩니다.

  • 은 Hash index를 지원하여 검색 속도가 매우 빠릅니다.

  • 은 테이블 수준 잠금이므로 동시 쓰기 성능이 낮습니다.

  • 은 BLOB 또는 TEXT 유형의 컬럼을 지원하지 않으며, 각 행의 길이는 고정되어 있습니다. varchar를 지정하더라도 실제 저장소에서는 char로 변환됩니다.

참고

InnoDB에 없는 일부 기능을 사용해야 하거나 이를 대체할 수 있는 다른 방법이 없는 경우를 제외하고는 InnoDB 엔진 —— "고성능 MySQL"

또한 위의 내용에는 일반적으로 사용되는 일부 스토리지 엔진만 나열되어 있으며 이는 포괄적이지 않습니다.

테이블을 생성할 때 테이블의 스토리지 엔진인 테이블 유형을 지정할 수 있습니다. 테이블의 스토리지 엔진은 데이터가 저장되고 액세스되는 방식과 트랜잭션이 저장되는 방식을 결정합니다. 테이블의 스토리지 엔진은 SQL 문을 처리하는 데 필요한 스토리지 공간과 속도에 큰 영향을 미칩니다. 다양한 스토리지 엔진은 서로 다른 특성을 가지고 있습니다. 일부 스토리지 엔진은 많은 복잡한 SELECT 문을 처리하는 데 매우 적합한 반면, 다른 스토리지 엔진은 빠른 업데이트를 달성하는 데 더 적합합니다.

InnoDB

InnoDB는 MySQL의 기본 트랜잭션 엔진이자 가장 중요하고 널리 사용되는 스토리지 엔진입니다. 다수의 단기 트랜잭션을 처리하도록 설계되었습니다. 단기 트랜잭션은 대부분의 경우 정상적으로 제출되며 거의 롤백되지 않습니다. InnoDB의 성능과 자동 충돌 복구 기능은 비트랜잭션 스토리지 요구 사항에 널리 사용됩니다.

다른 스토리지 엔진을 사용해야 하는 아주 특별한 이유가 없는 한 InnoDB 엔진을 우선적으로 사용해야 합니다. ————"고성능 MySQL"

  • InnoDB는 MVCC를 사용하여 높은 동시성을 지원하고 4가지 표준 격리 수준을 구현합니다. 기본 수준은 REPEATABLE READ이며 간격 잠금 전략은 팬텀 읽기를 방지합니다.

  • InnoDB는 클러스터형 인덱스 기반의

  • 이 외래 키 제약 조건을 지원함을 나타냅니다.

  • 열 AUTO_INCREMENT 속성의 자동 추가를 지원합니다.

  • 업무. InnoDB 스토리지 엔진은 트랜잭션을 지원하는 표준 MySQL 스토리지 엔진입니다.

  • 인덱스를 삭제하거나 추가할 때 테이블 데이터 전체를 복사할 필요가 없습니다.

InnoDB는 디스크에서 데이터를 읽을 때 예측 가능한 미리 읽기, 메모리에 해시 인덱스를 자동으로 생성하여 작업 속도를 높이는 등 다양한 내부 최적화를 수행했습니다. 삽입 작업 속도를 높이는 삽입 버퍼입니다.

InnoDB 테이블은 클러스터형 인덱스를 기반으로 구축됩니다. InnoDB의 인덱스 구조는 다른 MySQL 엔진과 매우 다릅니다. 클러스터형 인덱스는 기본 키 쿼리에 대한 성능이 높습니다. 그러나 보조 인덱스에는 기본 키 열이 포함되어야 하므로 기본 키 열이 크면 다른 모든 인덱스도 커집니다. 따라서 테이블에 인덱스가 많으면 기본 키는 최대한 작아야 합니다.

MyISAM

MyISAM은 전체 텍스트 인덱싱, 압축, 공간 함수(GIS) 등을 포함한 많은 기능을 제공하지만 MyISAM은 트랜잭션 및 행 수준 잠금을 지원하지 않습니다. 그리고 충돌 후에는 안전하게 복원할 수 없다는 것이 단점입니다. MySQL 5.1 및 이전 버전에서는 MyISAM이 기본 스토리지 엔진입니다. MySQL이 오랫동안 트랜잭션을 지원했음에도 불구하고 MySQL은 여전히 ​​많은 사람들이 생각하는 비트랜잭션 데이터베이스입니다.

  • MyISAM은 행이 아닌 전체 테이블을 잠급니다.

  • 전체 텍스트 색인 생성을 지원합니다.

  • 압축 테이블을 지원합니다. 압축된 테이블은 수정할 수 없으며 디스크 공간 사용량을 크게 줄여 디스크 I/O 작업을 줄이고 쿼리 성능을 향상시킬 수 있습니다.

저장소

MyISAM은 테이블을 두 개의 파일, 즉 데이터 파일과 인덱스 파일에 각각 .MYD 및 .MYI 확장자로 저장합니다. MyISAM 테이블에는 동적 또는 정적 행이 포함될 수 있습니다. MySQL은 테이블 정의에 따라 사용할 행 형식을 결정합니다.
MyISAM 테이블에 가변 길이 행이 있는 경우 기본 구성에서는 256TB의 데이터만 처리할 수 있습니다.

특징

MySQL의 최초 스토리지 엔진 중 하나로, 아직 몇 가지 기능이 있습니다.

잠금 및 동시성 – 테이블 잠금

MyISAM은 행이 아닌 전체 테이블을 잠급니다. 읽기 시에는 읽어야 하는 모든 테이블에 공유 잠금이 추가되고, 쓰기 시에는 테이블에 배타적 잠금이 추가됩니다. 그러나 테이블에 읽기 쿼리가 있는 동안 새 레코드를 테이블에 삽입할 수도 있습니다(동시 삽입).

복구

MyISAM 테이블의 경우 MySQL은 검사 및 유지 관리 작업을 수동 또는 자동으로 수행할 수 있지만 여기서 언급하는 복구는 트랜잭션 복구 및 충돌 복구와는 다른 개념입니다.

인덱스 기능

MyISAM 테이블의 경우 BLOB 및 TEXT와 같은 긴 필드도 처음 500자를 기반으로 인덱스를 생성할 수 있습니다. MyISAM은 또한 단어 분할을 기반으로 생성된 인덱스인 전체 텍스트 인덱싱을 지원하며 복잡한 쿼리를 지원할 수 있습니다.
인덱스 키 업데이트 지연
MyISAM 테이블을 생성할 때 DELAY_KEY_WRITE 옵션을 지정하면 수정된 인덱스 데이터가 각 수정이 완료될 때 즉시 디스크에 기록되지 않습니다.
 

MyISAM 성능

MyISAM 엔진은 단순하게 설계되었으며 데이터가 컴팩트한 형식으로 저장되므로 특정 시나리오에서의 성능이 매우 좋습니다. 그러나 테이블 잠금의 존재는 성능에 큰 영향을 미칩니다.

아카이브 엔진

아카이브 스토리지 엔진은 INSERT 및 SELECT만 지원합니다. 아카이브 엔진은 모든 쓰기를 캐시하고 zlib를 사용하여 삽입을 압축하므로 MyISAM 테이블보다 디스크 I/O가 덜 필요합니다. 그러나 모든 SELECT 쿼리는 전체 테이블 스캔을 수행해야 합니다. 따라서 아카이브 테이블은 데이터 분석을 위해 전체 테이블 스캔이 필요한 로깅 및 데이터 수집 애플리케이션에 적합합니다.

아카이브 엔진은 행 수준 잠금 및 전용 버퍼를 지원하므로 높은 동시 삽입이 가능합니다. 아카이브는 일관된 읽기를 달성하기 위해 쿼리가 시작되기 전에 테이블에 존재하는 모든 행이 반환될 때까지 다른 SELECT가 실행되지 않도록 합니다. 또한 읽기 작업이 완료될 때까지 보이지 않는 일괄 삽입도 구현됩니다. 이 메커니즘은 트랜잭션 및 MVCC의 일부 기능을 모방하지만 아카이브 엔진은 트랜잭션 엔진이 아니라 고속 삽입 및 압축에 최적화된 엔진입니다.

CSV 스토리지 엔진

이 엔진은 일반 CSV 파일을 MySQL 테이블로 처리할 수 있지만, 이 테이블은 인덱스를 지원하지 않습니다. CSV 파일을 CSV 스토리지 엔진의 데이터 디렉터리에 복사하기만 하면 되며, MySQL에 나열된 규칙을 사용하여 열고 사용할 수 있습니다.

메모리 엔진

데이터에 빠르게 액세스해야 하고, 다시 시작한 후에도 데이터가 수정되거나 손실되지 않는 경우 메모리 테이블을 사용하는 것이 매우 유용합니다. 메모리 테이블은 모든 데이터가 메모리에 저장되고 디스크 I/O 작업이 필요하지 않기 때문에 MyISAM 테이블보다 훨씬 빠릅니다. 다시 시작한 후에도 메모리 테이블의 구조는 유지되지만 데이터는 손실됩니다.

  • 은 Hash index를 지원하여 검색 속도가 매우 빠릅니다.

  • 은 테이블 수준 잠금이므로 동시 쓰기 성능이 낮습니다.

  • 은 BLOB 또는 TEXT 유형의 컬럼을 지원하지 않으며, 각 행의 길이는 고정되어 있습니다. varchar를 지정하더라도 실제 저장소에서는 char로 변환됩니다.

참고

InnoDB에 없는 일부 기능을 사용해야 하거나 이를 대체할 수 있는 다른 방법이 없는 경우를 제외하고는 InnoDB 엔진 —— "고성능 MySQL"

또한 위의 내용에는 일반적으로 사용되는 일부 스토리지 엔진만 나열되어 있으며 이는 포괄적이지 않습니다.

위 내용은 [MySQL] MySQL 스토리지 엔진의 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.