MySQL InnoDB 概述

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: MySQL InnoDB 概述

InnoDB 架构

下图是官方文档给出的InnoDB存储结构

InnoDB的日志先行策略,按照内存到磁盘的顺序对数据进行处理。

其中的优点有以下几点

  • 内存中操作完成就可以返回成功,执行效率高
  • 就算是数据落回磁盘过程中断电也能通过redo日志找回
  • InnoDB的缓存池通过页链表实现,效率高

InnoDB的磁盘中的存储有以下特点,我做了简化直接突出重点,方便大家记忆

  • InnoDB表的限制:一个表的辅助索引最多64个,一行大小最多65535,组合索引最多16个字段
  • 表空间
  • 系统表空间
  • File-Per-Table 表空间
  • Undo表空间
  • 临时表空间

索引

InnoDB中通过索引组织表存放索引。

InnoDB中主键索引使用的是B+索引

B+树的特点

  • 每个非叶子节点只存储键值,不存储数据
  • 一般的高度为2-4层,所以查找速度很快

辅助索引有被称为非聚集索引,辅助索引存储的是主键的值,当拿到主键的值之后再去查找数据的过程被称为回表。

如果人家问你回表,可以按照回表-辅助索引-索引的逻辑解释。

覆盖索引指的是辅助索引能找到要找的列,而不需要回表。

联合索引的顺序很重要,所以我们在创建索引的过程中需要注意列的顺序。

事务

ACID

  • 原子性:Atomicity
  • 一致性:Consistency
  • 隔离性:Isolation
  • 持久性:Durability

事务隔离级别有4种,InnoDB默认支持REPEATABLE READ。

InnoDB通过redo日志实现事务,redo日志是存储在磁盘的物理操作日志。

binlog是维护日志一致性在内存里的逻辑日志。

脏读是指一个事务提交之前,另一个事务来读取数据造成的数据不一致。

幻读问题就是一个事务中同一个SQL多次执行,结果集不同。

Innodb支持行级锁。

行级锁分为共享锁和排他锁。

  • 共享锁(S锁),只可以读,不可以修改
  • 排它锁(X锁),不可读也不可写

意向锁(Intention Locks)

  • 意向共享锁(IS),加行共享锁之前需要得到的锁
  • 意向排他锁(IX),加行排他锁之前需要得到锁

行锁的存储结构

typedef struct lock_rec_struct        lock_rec_t
struct lock_rec_struct{
    ulint space;    /*space id*/
    ulint page_no;  /*page number*/
    unint n_bits;   /*number of bits in the lock bitmap*/
}

加锁逻辑:加锁-唯一索引的冲突检查-判断Gap锁或Next-Key锁-加X锁

面试侧重点

  • 基本的查询语法
  • 索引
  • 存储结构建议在索引的时候自己带出来点,给自己创造一些亮点
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
监控 关系型数据库 MySQL
在Linux中,mysql的innodb如何定位锁问题?
在Linux中,mysql的innodb如何定位锁问题?
|
2月前
|
SQL 存储 关系型数据库
"MySQL增列必锁表?揭秘InnoDB在线DDL,让你的数据库操作飞一般,性能无忧!"
【8月更文挑战第11天】在数据库领域,MySQL凭借其稳定高效的表现深受开发者喜爱。对于是否会在给数据表添加列时锁表的问题,MySQL的行为受版本、存储引擎等因素影响。从5.6版起,InnoDB支持在线DDL,可在改动表结构时保持表的可访问性,避免长时间锁表。而MyISAM等则需锁表完成操作。例如,在使用InnoDB的表上运行`ALTER TABLE users ADD COLUMN email VARCHAR(255);`时,通常不会完全锁表。虽然在线DDL提高了灵活性,但复杂操作或大表变更仍可能暂时影响性能。因此,进行结构变更前应评估其影响并择机执行。
53 6
|
2月前
|
SQL 数据采集 关系型数据库
七:《智慧的网络爬虫》— MySQL概述
【8月更文挑战第11天】本篇文章详细的介绍了MySQL数据库的安装与使用;并讲述了MySQL的基本操作及其应用语法
38 0
七:《智慧的网络爬虫》— MySQL概述
|
3月前
|
存储 SQL 关系型数据库
(十三)MySQL引擎篇:半道出家的InnoDB为何能替换官方的MyISAM?
MySQL是一款支持拔插式引擎的数据库,在开发过程中你可以根据业务特性,从支持的诸多引擎中选择一款适合的,例如MyISAM、InnoDB、Merge、Memory(HEAP)、BDB(BerkeleyDB)、Example、Federated、Archive、CSV、Blackhole.....
|
2月前
|
cobar 关系型数据库 MySQL
使用MyCat实现MySQL主从读写分离(一)概述
【8月更文挑战第11天】MySQL读写分离通过主从复制分散负载,主库负责写操作,从库承担读查询,以复制技术确保数据一致性。此策略有效缓解锁竞争,提升查询效能并增强系统可用性。实现方式包括应用层处理,简便快捷但灵活性受限;或采用中间件如MyCAT、Vitess等,支持复杂场景但需专业团队维护。
52 0
|
3月前
|
存储 关系型数据库 MySQL
MySQL InnoDB存储引擎的优点有哪些?
上述提到的特性和优势使得InnoDB引擎非常适合那些要求高可靠性、高性能和事务支持的场景。在使用MySQL进行数据管理时,InnoDB通常是优先考虑的存储引擎选项。
97 0
|
3月前
|
SQL Oracle 关系型数据库
第1章 MySQL概述
第1章 MySQL概述
18 0
|
4月前
|
关系型数据库 MySQL 调度
深入理解MySQL InnoDB线程模型
深入理解MySQL InnoDB线程模型
|
18天前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
20天前
|
存储 SQL 关系型数据库
使用MySQL Workbench进行数据库备份
【9月更文挑战第13天】以下是使用MySQL Workbench进行数据库备份的步骤:启动软件后,通过“Database”菜单中的“管理连接”选项配置并选择要备份的数据库。随后,选择“数据导出”,确认导出的数据库及格式(推荐SQL格式),设置存储路径,点击“开始导出”。完成后,可在指定路径找到备份文件,建议定期备份并存储于安全位置。
160 11
下一篇
无影云桌面