简单来说,存储引擎就是指表的类型以及表在计算机上的存储方式。
存储引擎是MySQL的概念,Oracle中没有存储引擎,Oracle中有OLTP和OLAP模式之分,不同的存储引擎决定了MySQL数据库中的表可以以不同的方式来存储。
MySQL中的存储引擎有很多种,可以通过“SHOW ENGINES”语句来查看。主要有InnoDB,MyISAM,MEMORY这三种。
1、InnoDB
InnoDB给MySQL的表提供了事务处理、回滚、崩溃修复能力和多版本并发控制的事务安全。MySQL后来的版本默认的存储引擎就是InnoDB。
- InnoDB支持AUTO_INCREMENT。自动增长的列不能为空,并且值必须唯一。
- MySQL中只有InnoDB支持外键,外键所在的表叫做子表,外键所依赖的表叫做父表。父表被子表所关联的字段必须为主键。当删除,更新父表中的某条信息的时候,子表也应该有相应改变,这是数据库的参照完整性规则。
- InnoDB中,创建的表的表结构存储在.frm文件中,数据和索引存储在innodb_data_home_dir和innodb_data_file_path定义的表空间中。
InnoDB的优势在于提供了良好的事务处理,崩溃修复能力和并发控制。缺点读写效率差,占用的数据空间较大。
2、MyISAM
MyISAM拥有较高的插入、查询速度,但不支持事务,不支持外键。
MyISAM的表存储成3个文件,文件的名字与表名相同。拓展名为frm,MYD,MYI。其中,frm文件存储表的结构,MYD(MYData)存储数据,MYI(MyIndex)存储索引。
基于MyISAM存储引擎的表支持3种不同的存储格式,包括静态型,动态型和压缩型。静态型是MyISAM的默认存储结构,它的字段是固定长度的;动态型包含变长字段,记录的长度不是固定的;压缩型需要用到myisampack工具,占用磁盘空间较小。
MyISAM占用空间小,处理速度快,缺点是不支持事务的完整性和并发性。
3、MEMORY
Memory是MySQL中一类特殊的存储引擎,其使用存储在内存中的内容来创建表,而且所有数据也存放在内存中。
每个基于memory存储引擎的表实际对应一个磁盘文件,该文件的文件名与表名相同,类型为frm类型。该文件只存储表的结构,其数据是存放在内存中的,有利于数据的快速处理。
Memory存储引擎默认使用哈希(HASH)索引,速度比B型树快,如果要使用B型树,可以在创建索引时选择使用。
因此,Memory存储引擎基于内存中的特性,处理速度非常快,但是数据容易丢失。