存储引擎是区别于其他数据库的一个重要特性。存储引擎的好处是,每个存储引擎都有各自的特点。开发人员能够根据具体的应用来选择合适的存储引擎。下面来对一些存储引擎简单的介绍。
InnnoDB引擎
InnoDb支持事务,其设计目标主要面向在线事务处理(OLTP)的应用。其特点是行锁设计,支持外键,支持非锁定读(即默认读取操作不会产生锁)
InnoDb引擎的表单独存放到一个独立的idb文件中。
InnoDb实现了SQL标准的4种隔离级别,还提供了插入缓冲,双写,自适应哈希索引,预读,多版本并发控制等技术来实现高并发,高性能和高可用的功能。
MyISAM引擎
MyISAM主要面向一些联机事务处理(OLAP)的数据库应用。不支持事务、表锁设计,支持全文索引。
MyISAM存储引擎表由MYD和MYI组成,MYD用来存放数据文件,MYI用来存放索引文件。
该存储引擎模式下,缓冲池只缓存索引文件,不缓冲数据文件
NDB存储引擎
NDB存储引擎是一个集群引擎。特点是数据全部放在内存中(也可以将非索引数据放在磁盘上),因此主键查找速度极快,并且通过添加数据存储节点可以线性地提高性能。
DNB存储引擎的连接操作是在数据库层完成的,而不是在存储引擎层完成的,因此复杂的连接操作需要巨大的网络开销。
Memory存储引擎
Memory存储引擎将表中的数据存放在内存中,如果数据库重启或发生崩溃,表中的数据都将消失。适合用于存储临时数据的临时表。
Memory存储引擎默认使用哈希索引,而不是B+树。并且不支持TEXT和BLOB列类型,只支持表锁,并发性能差。
Mysql数据库使用Memory存储引擎作为临时表来存放查询的中间结果集,如果中间结果集大于Memory引擎的表容量设置或者中间有TEXT和BLOB字段,则Mysql会把其转化到MyISAM引擎表而放到磁盘中。
Archive存储引擎
Archive存储引擎其设计目的主要是提供高速的插入和压缩功能,它的压缩比非常的高,非常适合存储归档数据。
使用行锁来实现高并发的插入操作,不支持事务。且支持INSERT和SELECT操作。
除此之外Mysql还有很多其他的存储引擎,包括Federated,Maria,Merge,CSV,Sphinx,Infobrght,XtraDB,PBXT,TokuDB,RethinkDB,InfiniDB,Aria,Groonga,OQGraph,Q4M,SphinxSE,Spider,VPForMySQL等等,他们都有各自的使用场景,感兴趣的可以留言。我会据需补充相关内容的。