[MySQL의] MySQL의 내부 : 심층적 인 이노와의 MyISAM 스토리지 엔진의 이해

소개

MySQL의 스토리지 엔진 등 이노,의 MyISAM, FEDERATED, MEMORY, CSV, 포함을 많이 가지고 있지만, 기본적으로는 다음 두 이노 후 일반적으로 5.1의 MyISAM 인 디폴트 MySQL의 스토리지 엔진 버전 전에, 처음 두에 사용됩니다 스토리지 엔진을 기본 차이는, 그것의 성능에 영향 어떤 한입니까? 이 기사에 대한 심층적 인 이들의 이해 당신과 함께 다루고있다.

1. 이노

InnoDB 引擎提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别。엔진은 또한 자체는 실제로 MySQL의 백엔드를 기반으로 전체 데이터베이스 시스템으로 대용량 데이터베이스 시스템을 처리 할 수 있도록 설계되어 있으며, 행 수준 잠금 및 외래 키 제약 조건을 제공하며, MySQL을 실행 이노 디비 메모리에 버퍼 풀을 생성합니다 데이터와 인덱스를 버퍼링. 그러나 엔진이 FULLTEXT 인덱스 유형을 지원하지 않으며, 테이블에 행 수를 보유하지 않는 경우 필요가 전체 테이블을 스캔하는 테이블에서 SELECT COUNT (*). 当需要使用数据库事务时,该引擎当然是首选。由于锁的粒度更小,写操作不会锁定全表,所以在并发较高时,使用Innodb引擎会提升效率。MySQL은 SQL 문의 구현에 스캔 할 수있는 범위를 확인할 수없는 경우, 행 수준 잠금이 절대 아니다, InnoDB의 테이블은 전체 테이블을 잠급니다.

2.의 MyISAM

의 MyISAM은 INSERT (삽입) 또는 업데이트 (갱신) 데이터 쓰기 작업이 전체 테이블을 잠글 필요가 때, 효율이 낮은 것, 데이터베이스 트랜잭션에 대한 지원을 제공하지 않습니다 행 수준 잠금 및 외래 키를 지원하지 않습니다. 그러나, InnoDB의 다른는 MyISAM中存储了表的行数,于是SELECT COUNT(*) FROM TABLE时只需要直接读取已经保存好的值而不需要进行全表扫描。테이블이 쓰기보다 훨씬 더 읽기 및 데이터베이스 트랜잭션 지원을 필요로하지 않는 경우, 다음의 MyISAM은 좋은 선택이 될 것입니다.

차이 3. 이노와의 MyISAM 스토리지 엔진

두 개의 스토리지 엔진 차이 3.1 개요

의 MyISAM은 트랜잭션을 지원하지 않는 동안 1, InnoDB는 트랜잭션을 지원합니다.

도 2는 이노가 로우 레벨의 잠금을 지원하고 로크 세분화 MyISAM 테이블 레벨이다.

3, InnoDB는 전체 텍스트 색인 FULLTEXT과의 MyISAM 지원을 지원하지 않습니다.

테이블에서, InnoDB하지만 테이블의 특정 행 번호 저장 행 수를 계산하지만,의 MyISAM에 전체 테이블을 스캔 할 때 4, 라인의 특정 번호가 테이블 InnoDB의 선택 계수의 구현 저장하지 않습니다 (*), 단순히 저장 읽어 행의 좋은 번호가 될 수 있습니다.
5, InnoDB는 비 클러스터 인덱스의 MyISAM 동안 인덱스를 클러스터.

3.2 클러스터 된 인덱스와 클러스터되지 않은 인덱스 원리

상기 비교에서, 이노 사용 聚簇索引의 MyISAM 것은 非聚簇索引클러스터되지 않은 인덱스 또는 클러스터 인덱스 모두 B + 트리 구조로 사용되는 사실. 도시 된 바와 같이 B + 트리 구조 :
그림 삽입 설명 여기
InnoDB使用的是聚簇索引,将主键组织到一棵B+树中,而行数据就储存在叶子节点上。기본 키와 같은 조건에 해당하는 리프 노드를 찾을 B + 트리 따른 검색 알고리즘을 찾기 위해 "ID = 14 WHERE"를 사용하는 경우, 데이터는 행 후의. 제 취득한 기본 키에 대응하는 리프 노드에 도달 보조 이름의 B + 트리 인덱스를 검색 : 이름 칼럼의 조건 검색은 두 단계를 필요로하는 경우. 두 번째 단계는 데이터의 최종 리프 노드 행 전체를 얻는 다른 B + 트리 검색 작업을 수행 차 B + 트리 인덱스의 기본 키를 사용한다.
MyISAM的是非聚簇索引,B+Tree的叶子节点上的data,并不是数据本身,而是数据存放的地址。비 클러스터형 인덱스, 기본 키 인덱스와 보조 인덱스의 가장 큰 차이는 얻을 기본 키 인덱스 키가 고유해야한다는 것입니다. 이 B + 트리의 비 클러스터형 인덱스는 정확히 같은 구조 노드로부터 다른 보이는 없지만, 저장된 콘텐츠는 노드 기본 키 인덱스 B 보조 키를 저장하는 데 + 트리 기본 키, 2 차 키 인덱스 B를 저장 + 트리 다르다. 테이블 데이터는 별도의 장소에 보관되고,이 두 B + 트리의 리프 노드가 테이블 데이터에 대한 실제 주소 포인트 테이블 데이터를 사용하고, 차이이 두 개의 키가 없다. 인덱스 트리 독립적이기 때문에, 보조 키를 통해 기본 키 인덱스 트리에 액세스하지 않고 검색. 다음도 룩업 프로세스는 :
그림 삽입 설명 여기

4. 요약

InnoDB는 응용 프로그램에서 INSERT 및 UPDATE 작업을 많이 할 경우, 더 SELECT 작업을하는 경우, 당신의 MyISAM을 고려해야한다, 이노을 선택해야합니다, 같은 ACID 트랜잭션 지원 등의 기능과 함께, 트랜잭션 처리에 적합하다.

게시 27 개 원래 기사 · 원 찬양 12 ·은 30000 +를 볼

추천

출처blog.csdn.net/Carson_Chu/article/details/104074966