一.概述
1.什么是存储引擎
数据库存储引擎是数据底层软件组件,数据库管理系统使用数据引擎进行创建,查询,更新和删除数据操作。不同的存储引擎提供不同的存储机制,索引技巧,锁定水平等功能,使用不同的存储引擎还可以获得特定的功能。MySQL的核心就是存储引擎。
2.MySQL5.7支持的存储引擎
MySQL支持多种类型的数据引擎,可分别根据各个引擎的功能和特性为不同的数据库处理任务提供不同的适应性和灵活性。在MySQL中,可以利用show engines语句来显示可用的数据库引擎和默认引擎。
MySQL提供了多个不同的存储引擎,包括处理事务安全表的引擎和处理非事务安全表的引擎。在 MySQL 中,不需要在整个服务器中使用同一种存储引擎,针对具体的要求,可以对每一个表使用不同的存储引擎。
MySQL 5.7 支持的存储引擎有 InnoDB、MyISAM、Memory、Merge、Archive、Federated、CSV、BLACKHOLE 等。可以使用SHOW ENGINES语句查看系统所支持的引擎类型
3. 如何选择MySQL存储引擎
不同的存储引擎都有各自的特点,以适应不同的需求,如表所示。为了做出选择,首先要考虑每一个存储引擎提供了哪些不同的功能。
|--------|--------|---------|---------|--------|
| 功能 | Mylsam | MEMORY | Archive | InnoDB |
| 存储限制 | 256TB | RAM(内存) | None | 64TB |
| 支持事务 | No | No | No | Yes |
| 支持全文索引 | Yes | No | No | No |
| 支持树索引 | Yes | Yes | No | Yes |
| 支持哈希索引 | No | Yes | No | No |
| 支持数据缓存 | No | N/A | No | Yes |
| 支持外键 | No | No | No | Yes |
提示:
- InnoDB 事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键。MySQL 5.5.5 之后,InnoDB 作为默认存储引擎。
- MyISAM 是基于 ISAM 的存储引擎,并对其进行扩展,是在 Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM 拥有较高的插入、查询速度,但不支持事务。
- MEMORY 存储引擎将表中的数据存储到内存中,为查询和引用其他数据提供快速访问。
4.选择存储引擎
- 如果要提供提交、回滚和恢复的事务安全(ACID 兼容)能力,并要求实现并发控制,InnoDB 是一个很好的选择。
- 如果数据表主要用来插入和查询记录,则 MyISAM 引擎提供较高的处理效率。
- 如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存的 MEMORY 引擎中,MySQL 中使用该引擎作为临时表,存放查询的中间结果。
- 如果只有 INSERT 和 SELECT 操作,可以选择Archive 引擎,Archive 存储引擎支持高并发的插入操作,但是本身并不是事务安全的。Archive 存储引擎非常适合存储归档数据,如记录日志信息可以使用 Archive 引擎。
5.MySQL默认存储引擎
InnoDB 是系统的默认引擎,支持可靠的事务处,可以修改mysql配置my.cnf中的mysqld区域的default-storage-engine=引擎名。
二.操作存储引擎
1:查看mysql支持的存储引擎
show engines
2:MyISAM存储引擎
每个 MyISAM 表在磁盘上存储成 3 个文件,其中文件名和表名都相同,但是扩展名分别为:
(1)frm(存储表定义)
(2)MYD(MYData,存储数据)
(3)MYI(MYIndex,存储索引)
MyISAM 表还支持 3 种不同的存储格式:
(1)静态(固定长度)表
(2)动态表
(3)压缩表
3:InnoDB存储引擎
InnoDB 是一个健壮的事务型存储引擎,这种存储引擎已经被很多互联网公司使用,为用户操作非常大的数据存储提供了一个强大的解决方案。MySQL 从 5.5.5 版本开始,默认的存储引擎为 InnoDB。InnoDB 存储引擎还引入了行级锁定和外键约束,在以下场景中使用 InnoDB 存储引擎是最理想的选择:
(1)更新密集的表:InnoDB 存储引擎特别适合处理多重并发的更新请求。
(2)事务:InnoDB 存储引擎是支持事务的标准 MySQL 存储引擎。
(3)自动灾难恢复:与其它存储引擎不同,InnoDB 表能够自动从灾难中恢复。
(4)外键约束:MySQL 支持外键的存储引擎只有 InnoDB。
(5)支持自动增加列 AUTO_INCREMENT 属性。
Innodb的数据文件:
ibd:数据表的数据文件
frm:数据表的元数据
opt:存储的是mysql的一些配置信息,如编码、排序的信息等
4:关于 MyISAM 与 InnoDB 选择使用
(1)如果应用程序一定要使用事务,毫无疑问要选择 InnoDB 引擎。但要注意,InnoDB的行级锁是有条件的。在 where 条件没有使用主键时,照样会锁全表。比如 DELETE FROM mytable 这样的删除语句。
(2)如果应用程序对查询性能要求较高,就要使用 MyISAM 了。MyISAM 索引和数据是分开的,而且其索引是压缩的,可以更好地利用内存。所以它的查询性能明显优于 InnoDB。 压缩后的索引也能节约一些磁盘空间
5.修改默认的存储引擎
(1)临时修改
mysql> alter table t1 engine=MyISAM;
mysql> show table status from auth where name='t1'\G //查看存储引擎
临时修改之后,在本次登录中,创建的表使用的默认存储引擎都是修改后的 ,
(2)永久修改
[root@localhost ~]# vim /etc/my.cnf
[mysqld]
#添加下面语句
default-storage-engine=MyISAM
之后每次创建的表使用的存储引擎都是修改后的。