MySQL存储引擎:MyISAM和InnoDB区别详解

1、MyISAM和InnoDB区别

1.1 区别

  InnoDB MyISAM
构造

由.frm文件、表空间(分为独立表空间或者共享表空间)和日志文件(redo log)组成。

MyISAM在磁盘上存储成三个文件,其中.frm文件存储表定义;.MYD(MYData)为数据文件;.MYI (MYIndex)为索引文件。
事务 支持 不支持
行锁,表锁 表锁
外键 支持 不支持
select count(*) InnoDB必须扫描全表。 内置了一个计数器,count(*)时它直接从计数器中读。
索引 只把索引都load到内存中。 把数据和索引都load到内存中。
全文索引 不支持 支持。

1.2 名词解释

表级锁:

直接锁定整张表,在锁定期间,其他进程无法对该表进行写操作,如果设置的是写锁,那么其他进程读也不允许,因此myisam支持的并发量低,但myisam不会出现死锁;

行级锁:

只对指定的行进行锁定,其他进程还是可以对表中的其他行进行操作的。因此行锁能大大的减少数据库操作的冲突,但有时会导致死锁。

全文索引

指对char、varchar和text中的每个词(停用词除外)建立倒排序索引。MyISAM的全文索引其实没啥用,因为它不支持中文分词,必须由使用者分词后加入空格再写到数据表里,而且少于4个汉字的词会和停用词一样被忽略掉。

2、不同版本对应默认引擎

在MySQL 5.1之前的版本中,默认的搜索引擎是MyISAM,从MySQL 5.5之后的版本中,默认的搜索引擎变更为InnoDB。

3、如何选择

因为MyISAM相对简单所以在效率上要优于InnoDB.如果系统读多,写少。对原子性要求低。那么MyISAM最好的选择。且MyISAM恢复速度快。可直接用备份覆盖恢复。
如果系统读少,写多的时候,尤其是并发写入高的时候。InnoDB就是首选了。
 

你可能感兴趣的:(mysql)