浅谈Mysql原理与优化(四)—— 存储引擎

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 存储引擎是MySQL非常独特的一个设计,本文从存储结构的角度介绍了MySQL不同存储引擎的特点,帮助大家在业务中更好的选择,和更好的设计数据库。

我们先回顾一下之前的MySQL架构图
image.png

存储引擎

存储引擎是mysql非常独特的一个设计,使用这个抽象的概念封装了数据库的具体的存储实现,只保留了统一的接口。

这样的优点是不同的开发者可以根据自己的需要实现不同功能的存储引擎。但是缺点是,上层的处理引擎不了解存储引擎的细节无法自己针对其优点进行性能上的优化。所以程序员需要更好的理解这些存储引擎的设计细节,从程序设计方面来让数据库获得更好的性能。

下面列出了一些mysql常用的存储引擎
image.png

种类有很多,功能也各有不同,使用较多的是Innodb和MyIsam,我们主要从存储的细节上来理解一下他们的不同。

存储形式主要有两种:堆表、聚集表。

堆表

堆表是指所有的数据按照增加的时间顺序排列在一起,没有特殊的排序。大概类似于如下的形式。

image.png

典型代表:MyISAM

优点是

  1. 数据按照插⼊顺序排列列,插⼊入性能很⾼
  2. 每⾏数据⽤隐藏的rowid标识(可以理解成数据位置)
  3. 所有索引记录最终指向rowid,这样按索引扫描的性能也不错。

但是MyISAM存储引擎有个很大的问题,就是它不支持事务,有没有日志机制,会导致在断电时表crash。交易性业务,或者数据安全性要求比较高的场景,不太推荐使用这种存储引擎。

聚集表

聚集这个词稍有有些不好理解,其实意思就是所有的数据按照某一种特定的顺序(比如主键的大小)进行排列,而不是按照增加的时间顺序。

image.png

典型代表:InnoDB

优点是

  1. 数据按主键顺序排列存储,形成树状,主键和数据形成同一个数据结构。
  2. 每⾏数据以主键标识
  3. 主键访问非常快,⾮主键索引指向主键,通过主键再访问数据,有一个二次查找的开销。

从这里我们可以看出Innodb得主键查询非常优秀,但是这样的排序存储有一个问题,如果频繁的在数据表中间插入数据,会导致索引结构的不断更新,反而会影响插入的速度。

所以在实践中,我们通常使用顺序增加的键作为主键,在保持主键查询性能的同时获得更好的插入性能。

除了以上存储的特性之外,Innodb最重要的特性是支持事务,可以在数据库断电,或者死机之后恢复到数据一致的状态。

数据的安全性通常是我们最优先考量的指标,由于这个重要的性质,所以在云服务的绝大多数场合,我们更推荐使用Innodb这个存储引擎。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
10天前
|
SQL 关系型数据库 MySQL
MySQL慢查询优化、索引优化、以及表等优化详解
本文详细介绍了MySQL优化方案,包括索引优化、SQL慢查询优化和数据库表优化,帮助提升数据库性能。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
MySQL慢查询优化、索引优化、以及表等优化详解
|
26天前
|
存储 关系型数据库 MySQL
MySQL主从复制原理和使用
本文介绍了MySQL主从复制的基本概念、原理及其实现方法,详细讲解了一主两从的架构设计,以及三种常见的复制模式(全同步、异步、半同步)的特点与适用场景。此外,文章还提供了Spring Boot环境下配置主从复制的具体代码示例,包括数据源配置、上下文切换、路由实现及切面编程等内容,帮助读者理解如何在实际项目中实现数据库的读写分离。
MySQL主从复制原理和使用
|
26天前
|
存储 SQL 关系型数据库
MySQL存储引擎
本文介绍了数据库优化的多个方面,包括选择合适的存储引擎、字段定义原则、避免使用外键和触发器、大文件存储策略、表拆分及字段冗余处理等。强调了从业务层面进行优化的重要性,如通过活动设计减少外部接口调用,以及在高并发场景下的流量控制与预处理措施。文章还提供了具体的SQL优化技巧和表结构优化建议,旨在提高数据库性能和可维护性。
MySQL存储引擎
|
11天前
|
存储 缓存 关系型数据库
【赵渝强老师】MySQL的MyISAM存储引擎
在MySQL5.1版本之前,默认存储引擎为MyISAM。MyISAM管理非事务表,提供高速存储和检索,支持全文搜索。其特点包括不支持事务、表级锁定、读写互阻、仅缓存索引等。适用于读多、写少且对一致性要求不高的场景。示例代码展示了MyISAM存储引擎的基本操作。
|
11天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL的InnoDB存储引擎
InnoDB是MySQL的默认存储引擎,广泛应用于互联网公司。它支持事务、行级锁、外键和高效处理大量数据。InnoDB的主要特性包括解决不可重复读和幻读问题、高并发度、B+树索引等。其存储结构分为逻辑和物理两部分,内存结构类似Oracle的SGA和PGA,线程结构包括主线程、I/O线程和其他辅助线程。
【赵渝强老师】MySQL的InnoDB存储引擎
|
15天前
|
缓存 监控 关系型数据库
如何优化MySQL查询速度?
如何优化MySQL查询速度?【10月更文挑战第31天】
44 3
|
17天前
|
缓存 关系型数据库 MySQL
如何优化 MySQL 数据库的性能?
【10月更文挑战第28天】
42 1
|
25天前
|
NoSQL 关系型数据库 MySQL
MySQL与Redis协同作战:百万级数据统计优化实践
【10月更文挑战第21天】 在处理大规模数据集时,传统的单体数据库解决方案往往力不从心。MySQL和Redis的组合提供了一种高效的解决方案,通过将数据库操作与高速缓存相结合,可以显著提升数据处理的性能。本文将分享一次实际的优化案例,探讨如何利用MySQL和Redis共同实现百万级数据统计的优化。
64 9
|
19天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
89 1
|
25天前
|
NoSQL 关系型数据库 MySQL
MySQL与Redis协同作战:优化百万数据查询的实战经验
【10月更文挑战第13天】 在处理大规模数据集时,传统的关系型数据库如MySQL可能会遇到性能瓶颈。为了提升数据处理的效率,我们可以结合使用MySQL和Redis,利用两者的优势来优化数据查询。本文将分享一次实战经验,探讨如何通过MySQL与Redis的协同工作来优化百万级数据统计。
55 5