12-数据库存储引擎

image-20200812132737977

查看 MySQL 数据库存储引擎:mysql> show engines;

1. InnoDB

InnoDB 是事务型数据库的首选引擎,支持事务安全表(ACID),其它存储引擎都是非事务安全表,支持行锁定和外键,MySQL5.5以后默认使用 InnoDB 存储引擎

InnoDB特点: 支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。

如果需要频繁的更新、删除操作的数据库,也可以选择 InnoDB,因为支持事务的提交(commit)和回滚(rollback)。

2. MyISAM

MyISAM 基于 ISAM 存储引擎,并对其进行扩展。它是在 Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM 拥有较高的插入、查询速度,但不支持事务,不支持外键。

MyISAM 特点: 插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM 能实现处理高效率。如果应用的完整性、并发性要求比较低,也可以使用。

3. MEMORY存储引擎

MEMORY 存储引擎将表中的数据存储到内存中,为查询和引用其他表数据提供快速访问。

MEMORY 特点: 所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,可以选择 MEMOEY。

它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。

20200706193339

1.4 InnoDB vs MyISAM

  • InnoDB 支持事务,MyISAM 不支持,这一点是非常之重要。事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而MyISAM就不可以了。

  • MyISAM 适合查询以及插入为主的应用,InnoDB 适合频繁修改以及涉及到安全性较高的应用。

  • InnoDB 支持外键,MyISAM 不支持

  • 从MySQL5.5.5以后,InnoDB是默认引擎。

  • InnoDB 中不保存表的行数,如 select count(* ) from table时,InnoDB 需要扫描一遍整个表来计算有多少行,但是 MyISAM 只要简单的读出保存好的行数即可。注意的是,当 count(*) 语句包含 where 条件时 MyISAM 也需要扫描整个表。

  • 对于自增长的字段,InnoDB中必须包含只有该字段的索引,但是在 MyISAM 表中可以和其他字段一起建立联合索引。

  • 清空整个表时,InnoDB 是一行一行的删除,效率非常慢。MyISAM 则会重建表。

  • InnoDB支持行锁(某些情况下还是锁整表,如 update table set a=1 where user like ‘%lee%’

现在一般都是选用InnoDB了,主要是MyISAM的全表锁,读写串行问题,并发效率锁表,效率低。

1.4 修改数据库引擎的方法

  • 修改数据库配置文件 my.ini :-default-storage-engine=引擎类型

  • 创建表的时候修改

1
2
3
CREATE TABLE table_name(
...
)ENGINE=引擎类型;
  • 修改已经存在的表的数据库引擎
1
ALTER TABLE tp1 ENGINE=InnoDB;

12-数据库存储引擎
https://janycode.github.io/2017/06/18/05_数据库/01_MySQL/12-数据库存储引擎/
作者
Jerry(姜源)
发布于
2017年6月18日
许可协议