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,用来禁止使用当前会话的自动提交。