Home >Database >Mysql Tutorial >关于MySQL的Myisam和Innodb的一些比较总结_MySQL

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

WBOY
WBOYOriginal
2016-06-01 13:29:38791browse

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
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn