1 什么是存储引擎
- MySQL 的核心就是存储引擎,存储引擎,负责MySQL中数据的存储和提取。数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能。现在许多数据库管理系统都支持多种不同的存储引擎。
- InnoDB 事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键。MySQL 5.5.5 之后,InnoDB 作为默认存储引擎。
MyISAM 是基于 ISAM 的存储引擎,并对其进行扩展,是在 Web、数据仓储和其他应用环境下最常使用的存储引擎之一。 - MyISAM 拥有较高的插入、查询速度,但不支持事务。
- MySQL 提供了多个不同的存储引擎,包括处理事务安全表的引擎和处理非事务安全表的引擎。在 MySQL 中,不需要在整个服务器中使用同一种存储引擎,针对具体的要求,可以对每一个表使用不同的存储引擎。
- MySQL 5.7 支持的存储引擎有 InnoDB、MyISAM、Memory、Merge、Archive、Federated、CSV、BLACKHOLE 等。
2.InnoDB存储引擎
1. 每张表在磁盘上存储成两个文件:
- frm文件:存储表结构(表的定义数据)。
- idb文件:存储表数据和索引信息。
2.主要特点
- 支持行级锁:使用的锁粒度为行级锁,可以支持更高的并发.
- 支持事务:默认的事务隔离级别为可重复读,通过MVCC(并发版本控制)来实现的。附加:有点损失效率。
- 数据和索引放在了一起(idb文件)。
- 共享表空间:每一个数据库的所有的表数据,索引文件全部放在一个文件中,默认这个共享表空间的文件路径在data目录下。 默认的文件名为:ibdata1 初始化为10M。
3.MyISAM存储引擎
1.每张表在磁盘上存储成三个文件:
- frm文件:存储表结构。
- MYD文件:存放表的具体记录的数据。
- MYI文件:存储表的索引信息
2.主要特点:
- 支持表级锁。
- 不支持事务,但是这也意味着他的存储速度更快,如果你的读写操作允许有错误数据的话,只是追求速度,可以选择这个存储引擎。
- 数据(MYD)和索引(MYI)分开存储。
- 独享表空间:每一个表都将会生成以独立的文件方式来进行存储,每一个表都有一个.frm表描述文件,还有一个.ibd文件(这个文件包括了单独一个表的数据内容以及索引内容)。
4.如何选择存储引擎
可以根据以下的原则来选择 MySQL 存储引擎:
-
如果要提供提交、回滚和恢复的事务安全(ACID 兼容)能力,并要求实现并发控制,InnoDB 是一个很好的选择。
-
如果数据表主要用来插入和查询记录,则 MyISAM 引擎提供较高的处理效率。
-
如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存的 MEMORY 引擎中,
MySQL 中使用该引擎作为临时表,存放查询的中间结果。 -
如果只有 INSERT 和 SELECT 操作,可以选择Archive 引擎,Archive 存储引擎支持高并发的插入操作,但是本身并
不是事务安全的。Archive 存储引擎非常适合存储归档数据,如记录日志信息可以使用 Archive 引擎。
提示:使用哪一种引擎要根据需要灵活选择,一个数据库中多个表可以使用不同的引擎以满足各种性能和实际需求。 使用合适的存储引擎将会提高整个数据库的性能。
功能 | MylSAM | MEMORY | InnoDB | Archive |
---|---|---|---|---|
存储限制 | 256TB | RAM | 64TB | None |
支持事务 | No | No | Yes | No |
支持全文索引 | Yes | No | No | No |
支持树索引 | Yes | Yes | Yes | No |
支持哈希索引 | No | Yes | No | No |
支持数据缓存 | No | N/A | Yes | No |
支持外键 | No | No | Yes | No |
5.存储引擎基本命令
1. 查看数据库支持的所有存储引擎
show engines;
2. 查看数据库中某张表的存储引擎
show table status like "表名";
show table status from 数据库 where name="表名";
3. 修改数据库中某张表的存储引擎
alter table 表名 engine=innodb;