MYSQL 스토리지 엔진-MYISAM과 INNODB의 차이점

mysql의 트랜잭션

1. 컴퓨터 데이터베이스의 트랜잭션 : 컴퓨터 용어로 데이터베이스의 다양한 데이터 항목
액세스하여 업데이트 할 수있는 프로그램 실행 단위 (단위)를 의미 합니다 .. 2. 관계형 데이터베이스에서 트랜잭션은 SQL 문, 그룹 일 수 있습니다. SQL 문 또는 전체 프로그램

  • 트랜잭션은 중간에 오류가있는 한이 트랜잭션의 모든 작업을 취소해야합니다.
  • Myisam은 트랜잭션을 지원하지 않지만 innodb는 트랜잭션을 지원합니다.
MySQL의 스토리지 엔진
mysql 스토리지 엔진에는 MyISAM, InnoDB, BDB, MEMORY, MERGE, EXAMPLE, NDBCluster, ARCHIVE, CSV, BLACKHOLE, FEDERATED 등이 포함되며, 그중 InnoDB와 BDB는 트랜잭션 안전 테이블을 제공하고 다른 스토리지 엔진은 트랜잭션이 없습니다. 안전한 테이블.

mysql 버전

  • 5.1 이전의 기본 스토리지 엔진은 myisam이었습니다.
  • 5.1 이후의 기본 스토리지 엔진은 innodb입니다.

1. myisam과 innodb의 차이점

MyISAM :
myisam은 테이블 수준 잠금 만 지원합니다. 사용자가 myisam 테이블을 작동하면 select, update, delete 및 insert 문이 자동으로 테이블을 잠급니다. 잠긴 테이블이 삽입 동시성을 충족하면 테이블 끝에 삽입합니다. 새로운 데이터. lock table 명령어를 통해서도 테이블을 잠글 수 있는데,이 작업은 주로 트랜잭션을 모방 할 수 있지만 많은 돈을 소비하고 일반적으로 실험 데모에서만 사용됩니다.
InnoDB :
Innodb는 InnoDB 의 가장 큰 기능인 트랜잭션 및 행 수준 잠금을 지원합니다.
트랜잭션의 ACID 속성 : 원 자성, 일관성, 격리, 내구성.
동시 트랜잭션으로 인해 발생하는 몇 가지 문제 : 업데이트 손실, 더티 읽기, 반복 불가능한 읽기, 팬텀 읽기
여기에 사진 설명 삽입
mysql의 기본 트랜잭션 격리 수준을 확인합니다. "show global variables like'tx_isolation ';"

mysql> show global variables like 'tx_isolation'; 
+--------------------+----------------------------+
| Variable_name | Value                        |
+--------------------+----------------------------+
| tx_isolation      | REPEATABLE-READ   |
+--------------------+----------------------------+
1 row in set (0.01 sec)
等同于 select @@global.tx_isolation
  • 현재 세션 격리 수준 설정 세션 트랜잭션 격리 수준 반복 읽기를 설정합니다.

  • 시스템의 현재 격리 수준 설정 전역 트랜잭션 격리 수준 반복 읽기;
    Innodb의 행 잠금 모드에는 공유 잠금, 배타적 잠금, 의도적 공유 잠금 (테이블 잠금), 의도적 배타적 잠금 (테이블 잠금), 갭 잠금 유형이 있습니다.

참고 : 문이 인덱스를 사용하지 않으면 innodb는 작업 행을 결정할 수 없습니다. 이번에는 의도 잠금, 즉 테이블 잠금이 사용됩니다.
2. 데이터베이스 파일 차이점

여기에 사진 설명 삽입여기에 사진 설명 삽입

3. 지수 차이

1. 자동 성장 정보

  • myisam 엔진의 자동 증가 컬럼은 인덱스 여야합니다. 복합 인덱스 인 경우 자동 증가는 첫 번째 컬럼이 아닐 수 있습니다. 이전 컬럼에 따라 정렬 및 증가 할 수 있습니다.

  • 이노 디비 엔진의 자동 증가 인덱스를해야한다.이 복합 인덱스 인 경우에는 지수의 첫 번째 열에 있어야한다.
    기본 키에 대한 2

  • Myisam은 인덱스와 기본 키가없는 테이블이 존재하도록 허용합니다.

  • myisam의 인덱스는 저장된 행의 주소입니다.

  • innodb 엔진이 기본 키 또는 비어 있지 않은 고유 인덱스를 설정하지 않으면 자동으로 6 바이트 기본 키 (사용자에게 표시되지 않음)를 생성합니다.

  • innodb의 데이터는 메인 인덱스의 일부이며 추가 인덱스는 메인 인덱스
    3 의 값을 저장합니다 . count () 함수에 대해

  • myisam은 테이블에서 count (*)를 선택하면 테이블의 총 행 수를 저장합니다.

  • Innodb는 테이블의 총 행 수를 저장하지 않습니다. 테이블에서 select count (*)를 사용하면 많은 비용이 드는 전체 테이블을 순회하지만 wehre 조건을 추가하면 myisam과 innodb가 처리합니다. 같은 길.
    4. 전체 텍스트 인덱스

  • myisam은 FULLTEXT 유형의 전체 텍스트 인덱스를 지원합니다.

  • Innodb는 FULLTEXT 유형의 전체 텍스트 인덱싱을 지원하지 않지만 innodb는 전체 텍스트 인덱싱을 지원하기 위해 스핑크스 플러그인을 사용할 수 있으며 그 효과가 더 좋습니다. (Sphinx는 여러 언어로 API 인터페이스를 제공하는 오픈 소스 소프트웨어로 mysql의 다양한 쿼리를 최적화 할 수 있습니다.)
    5. 테이블에서 삭제
    가이 명령을 사용하면 InnoDB는 테이블을 다시 생성하지 않고 데이터를 하나씩 삭제합니다. innodb에서 많은 양의 데이터가있는 테이블을 지우려면이 명령을 사용하지 않는 것이 가장 좋습니다. (자르기 테이블 사용을 권장하지만 사용자는이 테이블을 삭제할 수있는 권한이 필요합니다.)
    6. 인덱스 저장 위치

  • myisam의 인덱스는 테이블 이름 + .MYI 파일로 저장됩니다.

  • Innodb의 인덱스와 데이터는 함께 테이블 스페이스에 저장됩니다.

요약하자면

1. MyISAM은 트랜잭션을 지원하지 않습니다 InnoDB는 트랜잭션 유형의 스토리지 엔진이므로 테이블에 트랜잭션 지원이 필요한 경우 MyISAM을 선택하지 않아야합니다.

2. MyISAM은 테이블 수준 잠금 만 지원하고, BDB는 페이지 수준 잠금으로 기본적으로 페이지 수준 잠금 및 테이블 수준 잠금을 지원하는 반면, InnoDB는 기본적으로 행 수준 잠금
(테이블 수준 잠금)으로 행 수준 잠금 및 테이블 수준 잠금을 지원 합니다. -레벨 잠금 : 전체 테이블을 직접 잠금, 잠금 기간 동안 다른 프로세스는 테이블에 쓸 수 없습니다. 쓰기 잠금이 설정되면 다른 프로세스는 읽을 수 없습니다. MyISAM은 테이블 레벨 잠금 스토리지 엔진입니다. 교착 상태 문제가 없음)

3. MyISAM 엔진은 외래 키를 지원하지 않으며 InnoDB는 외래 키를 지원합니다.

4. MyISAM 엔진의 테이블은 많은 동시 읽기 및 쓰기로 인해 종종 손상됩니다.

5. MyISAM은 count () 쿼리에 대해 더 많은 이점이 있습니다.

6. InnoDB는 엄청난 양의 데이터를 처리 할 때 최고의 성능을 발휘하도록 설계되었으며, CPU 효율성은 다른 디스크 기반 관계형 데이터베이스 엔진과 비교할 수 없을 수 있습니다.

7. MyISAM은 전체 텍스트 인덱싱 (FULLTEXT)을 지원하지만 InnoDB는이를 지원하지 않습니다.

8. MyISAM 엔진 테이블의 쿼리, 업데이트 및 삽입 효율성이 InnoDB보다 높습니다.

테스트

테스트 방법 1 : 10 개의 쿼리를 지속적으로 제출, 총 테이블 레코드 수 : 380,000, 시간 단위 s

여기에 사진 설명 삽입
a. 데이터 볼륨이 수백만이고 트랜잭션 처리가없는 경우 MyISAM을 사용하는 것이 최선의 선택
입니다 b. InnoDB 테이블의 크기가 더 크고 MyISAM을 사용하면 많은 하드 디스크 공간을 절약 할 수 있습니다.

테스트 2 : 데이터 읽기 성능 테스트. 매번 무작위로 1000 개의 레코드를 읽고 반복적으로 읽습니다.

여기에 사진 설명 삽입
MyISAM의 읽기 성능이 매우 무섭고 성능 차이가 3 배라는 것을 알 수 있습니다.

테스트 3 : 두 개의 스레드가 동시에 쓰고 두 개의 스레드가 동시에 읽습니다.

여기에 사진 설명 삽입
요약하자면 Innodb 삽입 성능은 쓰기가 많고 읽기가 적은 애플리케이션에서 더 안정적이며 동시 조건에서 기본적으로 변경되지 않을 수 있습니다. 더 빠른 읽기 속도가 필요한 애플리케이션 인 경우 MyISAM을 선택하십시오.

테스트 4 : 데이터 삽입 성능 테스트. 여기서는 innodb_flush_log_at_trx_commit 매개 변수를 켜고 끕니다. 각 테스트는 40 초 동안 실행됩니다. 테이블의 숫자는 실제 삽입 수입니다.

여기에 사진 설명 삽입
일반적으로 MyISAM 성능이 더 좋으며, 삽입 테스트 중에 시스템 리소스를 모니터링 한 결과 MyISAM이 매우 낮은 시스템 리소스를 차지하지만 Innodb는 높은 디스크를 차지하므로 트랜잭션 제어가 훨씬 더 많이 필요합니다.

추천

출처blog.csdn.net/weixin_45942735/article/details/104568969