mysql 系列:存储引擎

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 存储引擎。它在 mysql 里是一个非常重要的角色,负责了数据的创建、读取和更新,也就是数据的 I/O 操作。存储引擎有很多种,而且都有属于自己的特性,像我们常见的 InnoDB 有事务支持、MyISAM 速度较快等。

介绍

在上一篇文章 mysql 总体概述 里我们大概了解了 mysql 的架构设计,其中提到了存储引擎。它在 mysql 里是一个非常重要的角色,负责了数据的创建、读取和更新,也就是数据的 I/O 操作。

最重要的是,它是可插拔的模块,这意味着我们在切换存储引擎时,对于上层应用来讲,是不需要做任何适配的。

存储引擎有很多种,而且都有属于自己的特性,像我们常见的 InnoDB 有事务支持、MyISAM 速度较快等。

存储引擎的用法

作为插件化的模块,我们可以很自然的添加、卸载存储引擎,并且在创建表时指定存储引擎。

加载存储引擎

mysql 通过已经定义好的 API 接口与存储引擎通信,所以我们只要实现对应的 API 接口,就可以在 mysql 运行时加载进来。

在 mysql 源码里有一个 example 的存储引擎,我们可以看到它需要实现的 API 接口如下:

存储引擎接口

当我们实现了这些方法后,就可以把它编译为共享库,然后使用下面的语句加载进来了

INSTALL PLUGIN example SONAME 'example.so';

需要注意的是,插件文件必须位于 mysql 插件目录中,并且拥有对 plugin 表的 INSERT 权限。

卸载存储引擎

要卸载存储引擎,就比较简单了

UNINSTALL PLUGIN example;

当卸载后,对应的表将不可访问,所以一定要注意是否还有该存储引擎的表在使用!

查看并使用存储引擎

当我们加载了存储引擎后,可以使用下面的命令来查看:

show engines;

如果我们想要使用对应的存储引擎时,可以使用下面的方法:

  • 创建表时指定:CREATE TABLE t1 (id INT) ENGINE = INNODB;
  • 设置默认使用:SET default_storage_engine=INNODB;
  • 修改表时指定:ALTER TABLE t ENGINE = InnoDB;

其中 ALTER TABLE 将会把旧表复制到新的表,并且在此期间都会加锁使用,要特别注意。

存储引擎的种类特点

在 mysql 里实现了很多种的存储引擎,每种存储引擎都有属于它们的特色。我们来看看 mysql 里支持的存储引擎有哪些吧。

InnoDB:它是 mysql 的默认存储引擎,能够实现 ACID 特性的事务,并且能提交、回滚、恢复数据,能很好的保障用户数据。同时支持了行级锁、聚集索引以及外键约束,是一个完善的存储引擎。

MyISAM:是 mysql 最开始的存储引擎,占用空间小,能快速存储,但不支持事务,提供了基于表级别的锁粒度,适用于配置或只读功能的应用程序。

Memory:数据都是存在内存里的,能提供快速访问,不过应该较少人使用,毕竟一旦断电数据也就丢失了。

CSV:带有逗号分隔值的文本文件,没有索引存在。但是兼容性很好,可以跟其他的程序交换数据。

其他存储引擎使用较少,就不再提及了,

存储引擎的差异点

存储引擎都有属于自己的特性,它们的差异点大致上可以归纳如下:

  • 并发性:对锁的粒度操控不一样,有的提供了表锁,有的提供了行锁,甚至有的还提供了快照读。
  • 事务:有的存储引擎支持,有的不支持,并不是每个程序的设计都需要事务,像日志这种流水数据就不需要了。
  • 参照完整性:即是否支持外键,有了外键,则关联性强,在删除的时候会做关联检查。
  • 存储方式:在表和索引的存储方式上不一样,像 MyISAM 会存储成三个文件,InnoDB 所有的表都保存在同一个数据文件中。
  • 索引支持:有的是聚集索引,直接叶子节点上存放数据,有的在叶子节点只存了数据区域的指针。

总结

插件式的存储引擎为我们带来了多种选择,使用哪个存储引擎其实并没有指定的规则,只能是按照当前的需求分析去选择。像想要全文索引,可以选择 MyISAM 或 InnoDB,想要数据完整性或者是事务支持,则需要选择 InnoDB。

当然,很多时候我们会直接的选择默认的存储引擎 InnoDB,毕竟在面对随时都会改需求的互联网项目而言,大而全是我们最好的选择。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
24天前
|
存储 SQL 关系型数据库
MySQL存储引擎
本文介绍了数据库优化的多个方面,包括选择合适的存储引擎、字段定义原则、避免使用外键和触发器、大文件存储策略、表拆分及字段冗余处理等。强调了从业务层面进行优化的重要性,如通过活动设计减少外部接口调用,以及在高并发场景下的流量控制与预处理措施。文章还提供了具体的SQL优化技巧和表结构优化建议,旨在提高数据库性能和可维护性。
MySQL存储引擎
|
9天前
|
存储 缓存 关系型数据库
【赵渝强老师】MySQL的MyISAM存储引擎
在MySQL5.1版本之前,默认存储引擎为MyISAM。MyISAM管理非事务表,提供高速存储和检索,支持全文搜索。其特点包括不支持事务、表级锁定、读写互阻、仅缓存索引等。适用于读多、写少且对一致性要求不高的场景。示例代码展示了MyISAM存储引擎的基本操作。
|
9天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL的InnoDB存储引擎
InnoDB是MySQL的默认存储引擎,广泛应用于互联网公司。它支持事务、行级锁、外键和高效处理大量数据。InnoDB的主要特性包括解决不可重复读和幻读问题、高并发度、B+树索引等。其存储结构分为逻辑和物理两部分,内存结构类似Oracle的SGA和PGA,线程结构包括主线程、I/O线程和其他辅助线程。
【赵渝强老师】MySQL的InnoDB存储引擎
|
9天前
|
存储 关系型数据库 MySQL
【赵渝强老师】MySQL的Memory存储引擎
MySQL 的存储引擎层负责数据的存储和提取,支持多种存储引擎,如 InnoDB、MyISAM 和 Memory。InnoDB 是最常用的存储引擎,从 MySQL 5.5.5 版本起成为默认引擎。Memory 存储引擎的数据仅存在于内存中,重启后数据会丢失。示例中创建了使用 Memory 引擎的 test3 表,并展示了数据在重启后消失的过程。
|
1月前
|
存储 SQL 缓存
MySQL存储引擎如何完成一条更新语句的执行!
MySQL存储引擎如何完成一条更新语句的执行!
MySQL存储引擎如何完成一条更新语句的执行!
|
2月前
|
存储 缓存 关系型数据库
MySQL高级篇——存储引擎和索引
MyISAM:不支持外键和事务,表锁不适合高并发,只缓存索引,内存要求低,查询快MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM不支持事务、行级锁、外键,有一个毫无疑问的缺陷就是崩溃后无法安全恢复。5.5之前默认的存储引擎优势是访问的速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用针对数据统计有额外的常数存储。故而 count(*) 的查询效率很高表名.frm 存储表结构;表名.MYD 存储数据 (MYData);
MySQL高级篇——存储引擎和索引
|
3月前
|
存储 关系型数据库 MySQL
MySQL 中的事务存储引擎深入解析
【8月更文挑战第31天】
54 0
|
5月前
|
存储 关系型数据库 MySQL
|
4月前
|
存储 关系型数据库 MySQL
MySQL InnoDB存储引擎的优点有哪些?
上述提到的特性和优势使得InnoDB引擎非常适合那些要求高可靠性、高性能和事务支持的场景。在使用MySQL进行数据管理时,InnoDB通常是优先考虑的存储引擎选项。
173 0
|
5月前
|
存储 关系型数据库 MySQL
MySQL数据库进阶第一篇(存储引擎与Linux系统上安装MySQL数据库)
MySQL数据库进阶第一篇(存储引擎与Linux系统上安装MySQL数据库)