Mysql的常见存储引擎,你知道几个?
Mysql中用的最多的两种存储引擎就是MyISAM和InnDB,其中MyISAM是5.1版本之前的默认存储引擎,InnoDB是5.1版本之后的默认存储引擎。另外常见的存储引擎还有MEMORY、MERGE、NDB等。下面我们简单看一下她们的各有什么特点。
一、MyISAMMyISAM的特点是查询速度快、存储空间小,原因是在磁盘上分成三个文件存储:.frm(存储表定义),.MYD(MYData,存储数据),.MYI(MYIndex,存储索引),SELECT COUNT(*) FROM TABLE时,避免了全表扫描。
但是MyISAM不支持事务,也不支持外键,写入时是表锁,所以适合查询多、写入少的业务场景。
二、InnoDBInnoDB,最大的特点就是支持事务和行锁,是现在Mysql的默认存储引擎。对事务和写并发的支持使InnDB成为互联网公司最常使用的存储引擎。
1、事务
支持ACID的事务,支持事务的四种隔离级别。
2、行锁
支持行级锁及外键约束,所以在可以支持写并发。
3、全表扫描
SELECT COUNT(*) FROM TABLE时会进行全表扫描,效率低于MyISAM。
三、MEMORYMEMORY是一种特殊的存储引擎,特点是使用存储在内存中的内容来创建表,并且数据全部放在内存中。每个基于MEMORY存储引擎的表实际对应一个磁盘文件。该文件的文件名与表名相同,类型为frm类型。该文件中只存储表的结构,而其数据文件,都是存储在内存中,这样有利于数据的快速处理,提高整个表的效率。需要注意的是,服务器需要有足够的内存来维持MEMORY存储引擎的表的使用。如果不需要了,可以释放内存,甚至删除不需要的表。
MEMORY默认使用哈希索引,速度比使用B树索引快。当然如果你想用B型树索引,可以在创建索引时指定。注意,MEMORY用到的很少,因为它是把数据存到内存中,如果内存出现异常就会影响数据。如果重启或者关机,所有数据都会消失。因此,基于MEMORY的表的生命周期很短,一般是一次性的。
综上,我们可以看出这三种存储引擎的特点。
1、InnoDB:支持事务处理,支持外键,支持崩溃修复能力和并发控制。
2、MyISAM:占用空间小,查询速度快。缺点是不支持事务的完整性和并发性。
3、MEMORY:所有的数据都在内存中,处理速度快,但是安全性不高。对表的大小有要求,依赖内存,不能建立太大的表。