初识mysql存储引擎

154 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

MySQL存储引擎

和其他数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储
引擎上,插件式的存储引擎架构,将查询处理和其他的系统任务以及数据的存储提取分离。这种架构可以根据业务
的需求和实际需要选择合适的存储引擎。
和大多数的数据库不同, MySQL中有一个存储引擎的概念, 针对不同的存储需求可以选择最优的存储引擎。
存储引擎就是存储数据,建立索引,更新查询数据等等技术的实现方式 。存储引擎是基于表的,而不是基于库的。
所以存储引擎也可被称为表类型。
Oracle,SqlServer等数据库只有一种存储引擎。MySQL提供了插件式的存储引擎架构。所以MySQL存在多种存储
引擎,可以根据需要使用相应引擎,或者编写存储引擎。
MySQL5.0之后支持的存储引擎包含 : InnoDB 、MyISAM 、BDB、MEMORY、MERGE、EXAMPLE、NDB Cluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等,其中InnoDB和BDB提供事务安全表,其他存储引擎是非事务安全表,这里只介绍常见的 InnoDB 和 MyISAM。 查看当前mysql支持的存储引擎: show engines;

image.png

当前为mysql 5.7,mysql 5.5之前的默认存储引擎是MyISAM,5.5之后就改成了InnoDB。

各类存储引擎的特性

image.png

InnoDB(mysql唯一支持事务的存储引擎)

InnoDB存储引擎是Mysql的默认存储引擎,InnoDB引擎提供了具有提交、回滚和崩溃恢复能力的安全事务。但是比MyISAM存储引擎,InnoDB写处理效率会差一些并且会占用更多的磁盘空间以保留数据和索引,从特性上来说InnoDB的所涵盖的功能更加全面。 存储方式 InnoDB 存储表和索引有两种方式 :
使用共享表空间存储, 这种方式创建的表的表结构保存在.frm文件中, 数据和索引保存在 innodb_data_home_dir 和 innodb_data_file_path定义的表空间中,可以是多个文件。 使用多表空间存储, 这种方式创建的表的表结构仍然存在 .frm 文件中,但是每个表的数据和索引单独保存在.ibd 中。 自增主键 一般使用一个 int 字段来做自增主键,每次在当前最大自增主键上进行+1操作,假如当前自增主键是15,然后删除当前14,15两条数据,之后重启数据库再插入一条数据,会发现当前的自增主键为14.

MyISAM

MyISAM 不支持事务、也不支持外键,其优势是访问的速度快,对事务的完整性没有要求或者以SELECT、INSERT
为主的应用基本上都可以使用这个引擎来创建表 。 文件存储方式 每个MyISAM在磁盘上存储成3个文件,其文件名都和表名相同,但拓展名分别是 :
.frm (存储表定义);
.MYD(MYData , 存储数据);
.MYI(MYIndex , 存储索引); 自增主键 会创建一个隐藏列在每条数据做一个标识,每次插入数据会在标识上进行加1,就算重启数据库也不会造成主键和之前删除过的主键id重复