Mysql存储引擎
通常说的数据库,就是数据的集合:磁盘上的一些文件,或内存里的一批数据。我们常说的 MySQL、SQL Server,其实是数据库管理系统,负责存储,并提供查询和更新。
MySQL 是开源的关系型数据库,支持 SQL、子查询、存储过程、触发器、视图、索引、事务、锁、外键约束和影像复制等。它和 Oracle、SQL Server 一样是客户/服务器系统,并且是单进程多线程架构。一个重要特点是支持插入式存储引擎。
一、什么是存储引擎
关系库里的表是用来存储和组织信息的数据结构,可以理解成由行和列组成的表格,类似 Excel。有的表简单,有的复杂;有的根本不存长期数据;有的读很快但插入很差。实际开发需要各种各样的表,处理方式也不一样。
存储引擎说白了就是:如何存数据、如何建索引、如何更新和查询。因为数据以表的形式存放,存储引擎也可以叫表类型。Oracle、SQL Server 通常只有一种存储引擎;MySQL 提供多种,用户可以按表选引擎,也可以自己写引擎。
二、MySQL 有哪些存储引擎
常见的有 MyISAM、InnoDB、MEMORY、MERGE 等。客户端里可以用 show engines; 查看当前支持的引擎。
1. MyISAM
MyISAM 表独立于操作系统,可以从 Windows 服务器轻松移植到 Linux。每建一张 MyISAM 表,本地磁盘会生成三个以表名为名的文件。例如表 tb_Demo:
-
tb_demo.frm,存储表定义 -
tb_demo.MYD,存储数据 -
tb_demo.MYI,存储索引
MyISAM 不能处理事务,有事务需求的表不要用它。它特别适合:
-
选择密集型的表:筛选大量数据时非常迅速,这是最突出的优点。 -
插入密集型的表:并发插入允许同时选择和插入数据。例如管理邮件或 Web 服务器日志。
2. InnoDB
InnoDB 是健壮的事务型存储引擎,很多互联网公司用它扛很大的数据量。MySQL 5.7.11 起它就是默认引擎。它还引入了行级锁定和外键约束。适合:
-
更新密集的表:适合多重并发更新。 -
事务:支持事务的标准 MySQL 存储引擎。 -
自动灾难恢复:能从灾难中自动恢复。 -
外键约束:MySQL 支持外键的存储引擎只有 InnoDB。 -
支持自动增加列 AUTO_INCREMENT。
一般来说,需要事务、又有较高并发读取,InnoDB 是不错的选择。
| 对比 | MyISAM | InnoDB |
|---|---|---|
| 事务 | 不支持 | 支持 |
| 锁 | 表级为主 | 行级锁定 |
| 外键 | 不支持 | 支持(MySQL 中仅此引擎) |
| 磁盘文件 | .frm / .MYD / .MYI | 表空间管理 |
| 适用 | 选择/插入密集,如日志 | 更新密集、要事务与并发读 |
三、常用操作
1. 查看默认存储引擎
2. 显示当前库支持的所有存储引擎
3. 修改默认引擎
改配置文件 my.ini(MySQL 5.7)里的 default-storage-engine。
MySQL 5.1 以后,INFORMATION_SCHEMA 里有 ENGINES 表,信息和 show engines; 一样。查哪些引擎支持事务:
一句话总结:MySQL 按表选存储引擎;要事务、行锁和外键用 InnoDB,只读筛选或日志类插入用 MyISAM。
转载请注明来源:Mysql存储引擎







