MySQL---常见的存储引擎

存储引擎的概念是MySQL的特点,Oracle中没有专门的存储引擎的概念,Oracle有OLTP和OLAP模式的区分。不同的存储引擎决定了MySQL数据库中的表可以用不同的方式来存储,根据数据的特点来选择不同的存储引擎。

InnoDB

InnoDB是MySQL的默认数据库(5.5之后),InnoDB给MySQL的表提供了事务处理、回滚、崩溃修复能力和多版本并发控制的事务安全,是MySQL上第一个提供外键约束的表引擎。而且InnoDB对事务处理的能力,也是其他存储引擎不能比拟的。

InnoDB支持AUTO_INCREMENT,自动增长列的值不能为空,并且值必须唯一。MySQL中规定自增列必须为主键。如果自动增长列不输入值,或输入为0、空,则插入的值是自动增长的值;如果插入某个确定的值,且该值在前面没有出现过,直接插入。

InnoDB支持外键FOREIGN KEY,外键所在的表叫子表,外键所依赖的表叫做父表。父表中,被子表外键关联的字段必须为主键,当删除或更新父表的某条信息时,子表也必须有相应的改变,这是数据库参照完整性规则。

InnoDB主索引是聚簇索引,在索引中保存了数据,避免直接读取磁盘,对查询性能有很大提升。

InnoDB支持真正的在线热备份,其他存储引擎不支持在线热备份,要获取一致性视图需要停止对所有表的写入,而在读写混合场景中,停止写入可能也意味着停止读取。

InnoDB的优势在于提供了良好的事务处理、崩溃修复能力和并发控制,缺点是读写效率较差,占用的数据空间相对较大。

MyISAM

MyISAM曾经是MySQL的默认数据库(版本5.5之前),不支持事务不支持行级锁,只能对整张表加锁,读取时会对需要读到的所有表加共享锁,写入时则对表加排它锁。但在表有读取操作的同时,也可以往表中插入新的记录,这被称为并发插入。

MyISAM可以手动或自动执行检查和修复操作,但是和事务恢复以及崩溃恢复不同,可能导致一些数据的丢失,而且修复操作是非常慢的。

MyISAM的优势在于占用空间小,处理速度快,缺点是不支持事务的完整性和并发性。

MEMORY

MEMORY是MySQL中一类特殊的存储引擎,它使用存储在内存中的内容来创建表,而且数据全部放在内存中

每个基于MEMORY存储引擎的表实际上对应一个磁盘文件,该文件的文件名与表明相同,该文件中只存储表的结构,其数据文件都存储在内存中,这样有利于数据的快速处理,提高整个表的效率。但服务器需要有足够的内存来维持MEMORY存储引擎的表使用,如果不需要了可以释放内存,甚至删除不需要的表。

MEMORY默认使用哈希索引,速度比使用B型数索引要快。当然也可以在创建索引时指定B型树索引。

MEMORY用到的很少,因为它是把数据存到内存中,如果内存出现异常就会影响数据。如果重启或关机,所有数据都会消失。因此MEMORY的表的生命周期很短,一般是一次性的。

总结

特性 InnoDB MyISAM MEMORY
事务安全 支持
存储限制 64TB
空间使用
内存使用
插入数据的速度
对外键的支持 支持

InnoDB:支持事务,支持外键,支持行级锁,支持崩溃后的安全修复,但不支持全文索引。如果需要对事务的完整性要求比较高,要求实现并发控制,InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交commit和回滚rollback。

MyISAM:不支持事务,不支持外键,不支持行级锁,不支持崩溃后的安全修复,支持全文索引,支持延迟更新索引,支持压缩表。在表有读取查询的同时,支持往表中插入新纪录。

MEMORY:所有的数据都在内存中,数据的处理速度快,但是安全性不高。对表的大小有要求,不能建立太大的表。

作者:凯旋.Lau
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/KX-Lau/p/12409622.html