MySQL常见的两种数据库引擎比较

MySQL有多种存储引擎:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE 等。

MyISAM&InnoDB比较

引擎 特点
MyISAM MySQL的默认引擎;
磁盘上存储成三个文件( .frm:表定义,.MYD:数据文件,.MYI (MYIndex):索引文件);
不支持事务处理;
不支持外键;
支持全文检索(FULLTEXT);
自增长字段可以和其它字段一起建立联合索引;
清空表操作是直接重建该表,效率高;
表级锁,并发量较小,不适合大量update;
缓存索引,查询数据相对较快,适合大量的select;
索引和数据分开,索引有压缩,内存使用率高;
表格可以被压缩;
InnoDB 磁盘存两个文件InnoDB表空间数据文件、日志文件;
支持事务处理;
支持外键;
不支持FULLTEXT类型的索引;
对于自增长的字段,InnoDB中必须包含只有该字段的索引;
清空整个表时,InnoDB是一行一行的删除,效率非常慢;
支持行锁;
并发量较大,适合大量update;
不保存表的行数;
如设置成默认引擎需在配置文件my.ini中指定default-storage-engine=INNODB
  • 索引:是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。索引有助于更快地获取信息。索引的一个主要目的就是加快检索表中数据的方法,也就是能协助信息搜索者尽快的找到符合限制条件的记录ID的辅助数据结构。

    • 存储结构划分
      • 聚簇索引:是按照数据存放的物理位置为顺序的,能提高多行检索的速度。
      • 非聚簇索引:对于单行的检索很快。
    • 功能划分
      • 唯一索引:不允许其中任何两行具有相同索引值的索引。
      • 主键索引:数据库表中一列或多列组合,其值唯一标识表中的的一行。在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。
      • 聚集索引:在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。如果某索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的数据访问速度。
  • 事务处理:事务是数据库运行中的逻辑工作单位。是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。

    • 原子性:一组事务,要么成功;要么撤回。
    • 稳定性 :有非法数据(外键约束之类),事务撤回。
    • 隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。
    • 可靠性:软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得,innodb_flush_log_at_trx_commit 选项 决定什么时候吧事务保存到日志里。在 MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作。因此要显式地开启一个事务务须使用命令 BEGIN 或 START TRANSACTION,或者执行命令 SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。

参考