MySQL【存储引擎】:InnoDB、MyISAM、Memory...

思维导图

一、存储引擎

MySQL 常见的存储引擎有 InnoDB、MyISAM 和 Memory。

InnoDB

  1. 是 Mysql 5.5 之后的默认引擎
  2. 存储在硬盘,++存储量受限,存储限制 64TB++
  3. 支持事务、行级锁和外键
  4. 具有事务提交、回滚和崩溃恢复,还有数据缓存、聚簇索引、全文索引等功能
  5. 适合高负载的 OLTP 应用

MyISAM

  1. 是 MysqL 5.5 之前的默认引擎
  2. 存储在硬盘,++存储量最大,存储限制为 256TB++
  3. 不支持事务、行级锁和外键,只支持表锁
  4. 锁的粒度较大,更新性能较差
  5. 比较适合读多写少的场景。

Memory

  1. Memroy 是存储于内存中的
  2. 数据的读写还是很快的,但是数据不具有持久性
  3. 只适合临时存储的场景。

二、相关面试题

MySQL 有哪些存储引擎?

首先有Innodb引擎,它提供了对数据库ACID事务的支持,并且还提供了行级锁和外键的约束。Innodb的设计目标就是处理大数据容量的数据库系统;

还有MyIASM引擎,它是原本Mysql的默认引擎,不提供事务的支持,也不支持行级锁和外键;

最后还有一个MEMORY引擎,它的所有数据都在内存中,数据的处理速度快,但是安全性不高,很少使用。

MyISAM 和 InnoDB 有什么区别?

  1. 最根本:MyISAM 只支持表锁,InnoDB 支持行锁,高并发写差距巨大。
  2. 事务:MyISAM 压根没有,InnoDB 完整 ACID、支持回滚。
  3. 奔溃恢复:MyISAM 崩溃后大概率要 repair,InnoDB 用 redo/undo 自动恢复。
  4. 外键:MyISAM 不支持,InnoDB 支持外键约束。
  5. 索引:MyISAM 索引叶子存记录地址,InnoDB 主键叶子即数据,二级索引回表用主键值。
  6. 存储文件:MyISAM 分 .MYD(数据)+.MYI(索引),InnoDB 用 .ibd 或共享表空间。
  7. 全文索引:老版本 MyISAM 有,InnoDB 5.6 起也支持,实际用 ES 更多。
  8. 计数器:SELECT COUNT(*) MyISAM 瞬间给出,InnoDB 要全表或索引扫描。

一句话收尾: "读多写少、不要求事务用 MyISAM 图个简单;在线事务、高并发、必用 InnoDB。"

追问:为什么MyISAM比InnoDB快?**

具体的有以下几点:

  1. MyISAM 只缓存了索引块,减少了缓存换入换出的频率(因为每次更新数据都需要更新缓存)
  2. MyISAM的表结构非聚簇索引,而InnoDB是聚簇索引,InnoDB的二级索引需要找到id回表查一级索引,而MyISAM所有的索引直接指向数据行的存储位置offset。
  3. InnoDB还需要维护MVCC一致,虽然你的场景没有,但它还是需要去检查和维护,而Myisam 表锁.牺牲了写性能,提高了读性能。

追问:你上面提到了支持行级锁,那你了解++行级锁锁的到底是什么++么?

其实行级锁根据锁的粒度还可以划分为:

  • 记录锁(Record Lock)锁的是索引记录,
  • 间隙锁(Gap Lock)锁的是索引记录之间的间隙,
  • 临键锁(Next-Key Lock)临键锁是间隙锁和记录锁的组合,同时锁索引记录和间隙,范围是左开右闭。

追问:上面说了行级锁,你是否可以讲下****++InnoDB的锁机制++**** ++?++

锁机制分类根据不同的划分类型可以归类为

  1. 按照 锁的粒度 ,可分为全局锁、表级锁、行级锁、页级锁(innoDB中没有)
  2. 按照 锁的级别 ,可分为共享锁、排他锁
  3. 按照 加锁的方式 ,可分为自动锁、显示锁
  4. 按照 锁的使用方式 ,可分为乐观锁、悲观锁

追问:MyISAM的索引结构存在什么问题?

通过前面提到的MyISAM的特点,可以发现它的结构文件是三个,分别是表结构、数据行、索引,而InnoDB的文件是两个。所以我们可以了解到MyISAM的与InnoDB最大不同就是MyISAM采用了数据与索引分离的存储方式,也就是说两者是相互独立的,也是因为如此,MyISAM的索引都为非聚簇索引,同时也会导致MyISAM查询数据需要进行两次查询(先通过索引查出数据所在的地址,然后再查询真正的数据)。

相关推荐
小时候没少挨打39 分钟前
从0到1安装NVIDIA驱动(NVSwitch+Driver+IB网络驱动)
运维·服务器·数据库
dagouaofei40 分钟前
AI制作年终总结PPT零基础可用
人工智能·python·powerpoint
Q_Q51100828541 分钟前
python+django/flask+vue的基于文学创作的社交论坛系统
spring boot·python·django·flask·node.js·php
即随本心0.o44 分钟前
大模型springai,Rag,redis-stack向量数据库存储
java·数据库·redis
豐儀麟阁贵44 分钟前
9.1String类
java·开发语言·算法
晴栀ay1 小时前
AI TO SQL:AIGC时代数据库操作的革命性变革
数据库·llm·aigc
okseekw1 小时前
Java内部类实战指南:4种类型+5个经典场景,开发效率直接拉满!
java·后端
Q_Q5110082851 小时前
python+django/flask网红酒店预定系统
spring boot·python·django·flask·node.js·php
AAA简单玩转程序设计1 小时前
Python进阶:告别"入门即停滞",这3个知识点让代码优雅翻倍
python