mysql引擎 innodb memory myisam 区别

不同:
1、innodb表的数据总是有序存放的,而内存表的数据就是按照写入顺序存放的;
2、当数据文件有空洞的时候,innodb表在插入新数据的时候,为了保证数据有序性,只能在固定的位置写入新值,而内存表是找到空位就可以插入新值;
3、数据位置发生变化的时候,innodb表只需要修改主键索引,而内存表需要修改所有索引
4、innodb表用主键索引查询时需要走一次索引查找,用哪个普通索引查询的时候,需要走两次索引查找,而内存表没有这个区别,所有的索引的地位都是相同的
5、innodb支持变长数据类型,不同记录的长度可能不同,内存表不支持blob和text字段,并且即使定义了varchar(n),实际也当作char(n),也就是固定长度字符串来存储,因此内存表的每行数据长度相同
由于内存表的这些特性,每个数据行被删除以后,空出的额这个位置都可以被接下来要插入的数据复用
 
内存表的锁:
内存表不支持行锁,只支持表锁,因此,一张表只要有更新,就会堵住其他所有在这个表上的读写操作
 
跟行锁比起来,表锁对并发访问的支持不够好,所以,内存表的锁粒度问题,决定了它在处理并发事务的时候,性能都会太好
 
MyISAM是MySQL中常见的存储引擎,曾经是MySQL的默认存储引擎。MyISAM是基于ISAM引擎发展起来的,增加了许多有用的扩展。
 
MyISAM的表存储成3个文件。文件的名字与表名相同。拓展名为frm、MYD、MYI。其实,frm文件存储表的结构;MYD文件存储数据,是MYData的缩写;MYI文件存储索引,是MYIndex的缩写。
 
基于MyISAM存储引擎的表支持3种不同的存储格式。包括静态型、动态型和压缩型。其中,静态型是MyISAM的默认存储格式,它的字段是固定长度的;动态型包含变长字段,记录的长度不是固定的;压缩型需要用到myisampack工具,占用的磁盘空间较小。
 
MyISAM的优势在于占用空间小,处理速度快。缺点是不支持事务的完整性和并发性。
 
 
 
简单总结:
innodb:支持事务处理,支持外健,支持崩溃修复能力和并发控制,如果需要对事务的完整性要求比较高,要求实现并发控制,那么选择innodb有很大的优势,如果需要频繁的更新、删除操作的数据库,也可以选择innodb,因为支持事务的提交和回滚
 
myisam:插入数据快、空间和内存使用比较低,如果表主要是用于插入新记录和读出记录,那么选择myisam能实现处理高效率,如果应用的完整性、并发性要求比较低,也可以使用
 
memory:所有的数据都在内存中,数据的处理速度快,但是安全性不高,如果需要很快的读写速度,对数据的安全性要求较低,都可以选择memeoey。它对表的大小有要求,不能建立太大的表,所以,这类数据库只使用在相对较小的数据库表。
 
同一个数据库也可以使用多种存储引擎的表,如果一个表要求比较高的事务处理,可以选择innodb,这个数据库中可以讲查询要求比较高的表选择myisam存储,如果该数据库需要一个用于查询的临时表,可以选择memory存储引擎

猜你喜欢

转载自www.cnblogs.com/weiluoyan/p/10681655.html