>  기사  >  백엔드 개발  >  MyISAM과 InnoDB의 차이점

MyISAM과 InnoDB의 차이점

WBOY
WBOY원래의
2016-07-28 08:29:421110검색

MyISAM

InnoDB

构成区别

每个MyISAM在磁盘上储存三个文件第一个文件名以表名开始,扩展名指出文件类型

.frm文件存储表定义

数据文件的扩展名是.MYD(MYData)

索引文件的扩展名是.MYI(MYIndex)

基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB表的大小只受限于操作系统文件的大小,一般为2GB

事务处理

MyISAM类型的表强调的是性能,其执行速度比InnoDB类型更快,但是不提供事务支持

InnoDB提供事务,支持事务,外部键等高级数据库功能

增删改查操作

如果执行大量的select,MyISAM是更好的选择

1,如果你的数据要执行大量的insert和update,出于性能方面的考虑,应该使用InnoDB表

2,delete from table的时候,InnoDB是不会重新建立表的而是一行一行的删除

3,load table from master操作是对InnoDB是不起作用的,解决办法就是先把InnoDB表改为MyISAM表,导入数据后再改为InnoDB表,但对使用InnoDB特性(例如外键)的表不适用

对主键自增的操作

每个表一个auto_increment列的内部处理

MyISAM为insery和update操作自动更新这一列,这使得主键列更快(最少10%)

auto_increment可以通过alter和myisamchk来重置

对于auto_increment类型的字段,InnoDB必须包含只有该字段的索引,但是myisam表中,可以和其他字段建立先和索引

更好和更快的auto_increment处理

如果你为一个表指定auto_increment列,在数据字典里的InnoDB表句柄包含一个名为自增计数器的计数器,他被用在为该列赋新值。

自动增长计数器仅被存储在主内存中,而不是存在磁盘上

表的具体行数

select count(*) from table MyISAM只要简单读出保存好的行数,注意,当count(*)语句包含where条件时,两种表的操作是一样的

InnoDB中不保存表的具体行数,也就是说,执行select count(*) from table 的时候,需要扫描一遍整个表来计算有多少行

表锁

提供行锁,提供与oracle类型一致的不加锁读取,另外InnoDB表的行锁也不是绝对,如果在执行的sql语句时,Mysql不能确定扫描范围,InnoDB会锁全表

B+tree

b-tree或btree

MyISAM

InnoDB

헌법의 차이

MyISAM은 디스크에 3개의 파일을 저장합니다. 첫 번째 파일 이름은 테이블 이름으로 시작하고 확장자는 파일 유형을 나타냅니다. .frm 파일 저장 테이블 정의데이터 파일 확장자는 .MYD(MYData)입니다 Index 파일 확장자는 .MYI(MYIndex)입니다. 디스크 기반 리소스는 InnoDB 테이블스페이스 데이터 파일과 해당 로그 파일, InnoDB 테이블 크기는 운영 체제 파일의 크기에 의해서만 제한되며 일반적으로 2GB
트랜잭션 처리 td>MyISAM 유형 테이블은 성능을 강조하며 실행 속도는 InnoDB 유형보다 빠르지만 트랜잭션 지원을 제공하지 않습니다 InnoDB는 트랜잭션을 제공하고 트랜잭션, 외래 키 및 기타 고급 데이터베이스 기능을 지원합니다
추가, 삭제, 수정 및 쿼리 작업 선택 항목이 많은 경우 MyISAM이 더 나은 선택입니다 1, 데이터에 많은 삽입과 업데이트가 필요한 경우 성능상의 이유로 InnoDB 테이블을 사용해야 합니다2. 테이블에서 삭제할 때 InnoDB는 테이블을 다시 생성하지 않습니다. 그러나 행별로 삭제합니다. 3. 마스터 작업에서 테이블 로드는 InnoDB에서 작동하지 않습니다. 해결 방법은 먼저 InnoDB 테이블을 MyISAM 테이블로 변경한 다음 가져온 후 InnoDB 테이블로 변경하는 것입니다. 그러나 InnoDB 기능에서는 작동하지 않습니다(예를 들어 외래 키가 있는 테이블은 적용할 수 없습니다
기본 키 자동 증가 테이블당 auto_increment 열의 내부 처리MyISAM은 삽입 및 업데이트 작업을 위해 이 열을 자동으로 업데이트합니다. 기본 키 열을 더 빠르게 만듭니다(최소 10%) auto_increment는 alter 및 myisamchk를 통해 재설정할 수 있습니다. auto_increment 유형 필드의 경우 InnoDB는 이 필드에 대해서만 인덱스를 포함해야 하지만 myisam 테이블에서는 다른 필드와 함께 사전 합계 인덱스를 설정할 수 있습니다. 더 좋고 빠른 auto_increment 처리 테이블에 auto_increment 열을 지정하면 데이터 사전의 InnoDB 테이블 핸들에는 열에 새 값을 할당하는 데 사용되는 증분 카운터라는 카운터가 포함됩니다. 자동 증가 카운터는 디스크가 아닌 메인 메모리에만 저장됩니다.
테이블의 특정 행 수 select count(*) from table MyISAM은 단순히 저장된 행 수를 읽습니다. 참고, count(*) 문에 where 조건이 포함되어 있으면 두 테이블의 작업은 동일합니다. InnoDB는 특정 개수의 행을 테이블에 저장하지 않습니다. 즉, table에서 select count(*)를 실행할 때 테이블 전체를 스캔하여 행 수를 계산해야 합니다
잠금 테이블 잠금 행 잠금을 제공하고 Oracle 유형 읽기와 일치하는 잠금은 또한 InnoDB 테이블의 행 잠금이 절대적이지 않습니다. SQL 문을 실행할 때 Mysql이 스캔 범위를 결정할 수 없으면 InnoDB는 전체 테이블을 잠급니다
B+트리 b- 트리 또는 b트리 td>
위 내용은 관련 측면을 포함하여 MyISAM과 InnoDB의 차이점을 소개했습니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.