MySQL存储引擎

来源:互联网 发布:通过交换数据位运算 编辑:程序博客网 时间:2024/04/30 14:20

为了适应各种不同的运行环境,MYSQL提供了多种不同的存储引擎(Storage Engine ,在应用程序开发这个层面上,开发者可以根据不同的需求选择适合的Storage Engine 方案,更为灵活的是,你可以根据每张表将要存储数据的特点,选择不同的Storage Engine,也就是说,在一个MYSQL数据库中,可以混合使用多种不同的Storage Engine

MySQL常用的存储引擎为MyISAMInnoDBMEMORYMERGE,其中InnoDB提供事务安全表,其他存储引擎都是非事务安全表。 

刚接触MySQL的时候可能会有些惊讶,竟然有不支持事务的存储引擎,学过关系型数据库理论的人都知道,事务是关系型数据库的核心。但是在现实应用中(特别是互联网),为了提高性能,在某些场景下可以摈弃事务。下面一一介绍各种存储引擎:

MyISAM存储引擎

MyISAMMySQL官方提供默认的存储引擎,其特点是不支持事务、表锁和全文索引,对于一些OLAP系统,操作速度快。每个MyISAM在磁盘上存储成三个文件。文件名都和表名相同,扩展名分别是.frm(存储表定义)、.MYD (MYData,存储数据).MYI (MYIndex,存储索引)。这里特别要注意的是MyISAM不缓存数据文件,只缓存索引文件。

InnoDB存储引擎

InnoDB 存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。其特点是行锁设置、支持外键,并支持类似于Oracle的非锁定读,即默认情况下读不产生锁。InnoDB将数据放在一个逻辑表空间中(类似Oracle)。但是对比Myisam的存储引擎,InnoDB 写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。

注:MySQL支持外键存储引擎只有InnoDB,在创建外键的时候,要求附表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引。