关于MySQL的Myisam和Innodb的一些比较总结_MySQL

WBOY
풀어 주다: 2016-06-01 13:29:38
원래의
787명이 탐색했습니다.

bitsCN.com

关于MySQL的Myisam和Innodb的一些比较总结

 

总结一下MySQL的Myisam和Innodb引擎的一些差别,权当复习了。

 

首先二者在文件构成上:

 

Myisam会存储三个文件:.frm 存储表结构,.MYD存储表的数据,.MYI文件存储表的索引;所以完整的拷贝一张表这三个文件都需要。另外Myisam会对索引进行压缩。用Myisam备份会更简单。

Innodb也有 .frm表结构文件,但是数据存储就不同了,由于有表空间的概念,所以数据文件可能是独立的,也可能是空闲的,独立的话数据和索引都会在一个.ibd文件内。

对事务的支持:

Myisam不支持;所以如果你真的需要诸如事务,外键等特性,放弃它吧。

Innodb支持 事物,回滚等一些事务安全的ACID特性,支持外键。

锁:

Myisam只支持表锁,意即如果你执行了一条DML(数据操纵语言,即增删改查)语句,整张表会获得一把锁,在操作执行完之前其他人不能够再操作这张表了,所以如果表的并发高,Myisam性能会差一些

Myisam支持行锁,即可以只给某一行上锁而非整个表,所以在并发情况下,Update之类的操作性能会更好。当然如果一条SQL语句不能确定扫描范围时,也会锁表,诸如where like'%'的操作。更简单来说,Innodb使用where检索的列没有索引,那么就会锁表了。

DML(Insert, Select, Update, Delete):

Select:一般认为Myisam的读性能会比Innodb更好,所以如果是个读多写少的项目,这点上Myisam可以有加分。

Insert:这个要分情况来说,单线程操作,Myisam明显会快,但是并发多的话就不一定了。还有需要说明的是Myisam支持Insert Delayed操作,如果你的应用可以接受这种使用方式(可能延迟一下才生效),那么它会更好一些

Update:一般认为Innodb更快

Delete:Innodb,它会一行行的删除表,而不是重新建立表

其他:

count(*)  :Myisam会保存表的具体行数,而innodb不会,所以你在用phpmyadmin来查看时,表的行数会显示'~'大约多少行。所以select count(*) 用Myisam当然快,不过这是不加where条件的情况下

Myisam还支持全文索引,比如说搜索诸如某些text字段时 where * like "%*"时性能和效率会更好

Auto_Increment:Innodb必须包含只有该字段的索引,而Myisam可以使用联合索引。

Myisam建立的表可以使用Myisam_merge引擎,在某些情况下很有用。

bitsCN.com
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿