MySQL 데이터베이스 - 스토리지 엔진(2) - 스토리지 엔진 기능(InnoDB, MyISAM, Memory), 스토리지 엔진 선택

목차

스토리지 엔진 기능

InnoDB

소개하다

특징

문서

논리적 저장 구조

마이ISAM

소개하다

특징

문서

메모리

소개하다

특징

문서

차이점과 특징

스토리지 엔진 선택


스토리지 엔진 기능

위에서 스토리지 엔진이 무엇인지, 테이블 생성 시 스토리지 엔진을 지정하는 방법을 소개했고, 다음으로 더 중요한 세 가지 스토리지 엔진인 InnoDB, MyISAM , Memory 의 특징을 소개하겠습니다 . 

InnoDB

소개하다

InnoDB는 높은 신뢰성과 고성능을 결합한 범용 스토리지 엔진으로, MySQL 5.5 이후에는 InnoDB가 기본 MySQL 스토리지 엔진이다.

특징

  • DML (데이터베이스 테이블의 데이터 레코드 추가, 삭제 및 수정) 작업은 ACID( 원자성, 일관성, 격리 및 내구성) 모델을 따르고 트랜잭션을 지원합니다.
  • 동시 액세스 성능을 향상시키는 행 수준 잠금
  • 데이터 무결성과 정확성을 보장하기 위해 외래 키 FOREIGN KEY 제약 조건을 지원합니다.

문서

xxx.ibd

xxx는 테이블 이름을 나타내며, innoDB 엔진의 각 테이블은 테이블 구조(frm-early, sdi-new 버전), 데이터 및 테이블 인덱스를 저장하는 테이블스페이스 파일에 해당합니다.

테이블 구조 파일 frm은 MySQL 8.0 이후 테이블 구조가 데이터 포인트 sdi에 저장되고 sdi는 InnoDB 테이블 공간 파일에 통합됩니다.

매개변수: innodb_file_per_table(이 매개변수가 켜져 있으면 각 테이블에 해당 테이블스페이스 파일이 있음)

쿼리 시스템 매개변수 설정:

show variables like 'innodb_file_per_table';

논리적 저장 구조

  • 테이블스페이스: InnoDB 스토리지 엔진의 논리적 구조의 최상위 수준입니다. ibd 파일은 실제로 테이블스페이스 파일입니다. 테이블스페이스에는 여러 세그먼트 세그먼트가 포함될 수 있습니다.
  • 세그먼트(Segment): 테이블스페이스는 다양한 세그먼트로 구성되며, 공통 세그먼트에는 데이터 세그먼트, 인덱스 세그먼트, 롤백 세그먼트 등이 포함됩니다. InnoDB의 세그먼트 관리는 엔진 자체에 의해 수행되며 사람의 제어가 필요하지 않습니다. 세그먼트에는 여러 영역이 포함됩니다.
  • 면적(Area) : 면적은 테이블스페이스의 단위 구조이며, 각 면적의 크기는 1M이다. 기본적으로 InnoDB 스토리지 엔진 페이지 크기는 16K입니다. 즉, 한 영역에 64개의 연속 페이지가 있습니다.
  • 페이지: 페이지는 영역을 구성하는 가장 작은 단위이며, InnoDB 스토리지 엔진이 디스크를 관리하는 가장 작은 단위이기도 하며, 각 페이지의 기본 크기는 16KB입니다. 페이지 연속성을 보장하기 위해 InnoDB 스토리지 엔진은 매번 디스크에서 4~5개 영역에 적용됩니다.
  • 행(Row): InnoDB 스토리지 엔진은 행 지향적입니다. 즉, 데이터가 행에 저장된다는 의미입니다. 테이블을 정의할 때 지정된 필드 외에도 각 행에는 두 개의 숨겨진 필드도 포함됩니다(자세한 내용은 나중에 소개합니다). 

영역과 페이지의 크기는 고정되어 있으며, 그 중 Trx id는 마지막 작업 트랜잭션의 ID를 나타내고, Roll 포인터는 일부 포인터, col은 테이블의 해당 필드를 나타냅니다.

마이ISAM

소개하다

MyISAM은 MySQL의 초기 기본 스토리지 엔진이었습니다.

특징

  • 트랜잭션을 지원하지 않으며 외래 키를 지원하지 않습니다.
  • 테이블 잠금은 지원하지만 행 잠금은 지원하지 않습니다.
  • 빠른 액세스

문서

  • xxx.sdi: 테이블 구조 정보를 저장합니다.
  • xxx.MYD: 데이터 저장
  • xxx.MYI: 저장 인덱스

메모리

소개하다

메모리 엔진의 테이블 데이터는 메모리에 저장되며, 하드웨어 문제나 정전으로 인해 해당 테이블은 임시 테이블이나 캐시로만 사용할 수 있습니다.

특징

  • 메모리 저장
  • 해시 인덱스(기본값)

문서

xxx.sdi: 테이블 구조 정보를 저장합니다.

차이점과 특징

특징 InnoDB 마이ISAM 메모리
저장 한도 64TB 가지다 가지다
거래 보안 지원하다 - -
잠금 메커니즘 행 잠금 테이블 잠금 테이블 잠금
B+트리 인덱스 지원하다 지원하다 지원하다
해시 인덱스 - - 지원하다
전문 색인 지원됨(버전 5.6 이후) 지원하다 -
공간 활용 높은 낮은 해당 없음
메모리 사용량 높은 낮은 중간
일괄 삽입 속도 낮은 높은 높은
외래 키 지원 지원하다 - -

인터뷰 질문들

InnoDB 엔진과 MyISAM 엔진의 차이점은 무엇입니까?

  1. InnoDB 엔진은 트랜잭션을 지원하지만 MyISAM은 지원하지 않습니다.
  2. InnoDB 엔진은 행 잠금과 테이블 잠금을 지원하는 반면 MyISAM은 테이블 잠금만 지원하고 행 잠금은 지원하지 않습니다.
  3. InnoDB 엔진은 외래 키를 지원하지만 MyISAM은 이를 지원하지 않습니다.

주요 차이점은 위의 3가지 점이며, 인덱스 구조, 저장 제한 등에 관해서도 좀 더 심도 있는 답변을 주실 수 있습니다. /doc/refman/8.0/en/innodb-소개 .html

https://dev.mysql.com/doc/refman/8.0/en/myisam-storage-engine.html

 

스토리지 엔진 선택

스토리지 엔진을 선택할 때, 응용 시스템의 특성에 따라 적절한 스토리지 엔진을 선택해야 합니다. 복잡한 응용 시스템의 경우 실제 조건에 따라 여러 스토리지 엔진을 선택하고 결합할 수 있습니다.

  • InnoDB : Mysql의 기본 스토리지 엔진으로 트랜잭션 및 외래 키를 지원합니다. 애플리케이션이 트랜잭션 무결성에 대한 요구 사항이 상대적으로 높고 동시 조건에서 데이터 일관성이 필요하며 데이터 작업에 삽입 및 쿼리 외에도 많은 업데이트 및 삭제 작업이 포함되는 경우 InnoDB 스토리지 엔진이 더 적합한 선택입니다.
  • MyISAM: 애플리케이션이 주로 읽기 작업과 삽입 작업을 기반으로 하고 몇 가지 업데이트 및 삭제 작업만 수행하며 트랜잭션 무결성 및 동시성에 대한 요구 사항이 그리 높지 않은 경우 이 스토리지 엔진을 선택하는 것이 매우 적합합니다. (NoSQL 데이터베이스 MongoDB 로 대체 가능 )
  • MEMORY: 빠른 접근 속도로 모든 데이터를 메모리에 저장하며 주로 임시 테이블 및 캐시용으로 사용됩니다. MEMORY의 단점은 테이블 크기에 제한이 있다는 점인데, 너무 큰 테이블은 메모리에 캐시할 수 없고 데이터 보안도 보장할 수 없다. (NoSQL 데이터베이스 Redis 로 대체 가능 )


학습 내용: Dark Horse 프로그래머 - MySQL 데이터베이스 과정

추천

출처blog.csdn.net/li13437542099/article/details/132703021