【MySQL学习笔记】存储引擎

type
status
date
slug
summary
category
tags
icon
password
AI summary
Blocked by
Blocking
Category

执行一条SQL的请求过程

notion image
 
example
 
  • 连接器:建立连接,管理连接、校验用户身份;
  • 查询缓存:查询语句如果命中查询缓存则直接返回,否则继续往下执行。MySQL 8.0 已删除该模块;
  • 解析SQL,通过解析器对SQL查询语句进行词法分析、语法分析,然后构建语法树,方便后续模块读取表名、字段、语句类型
  • 执行SQL
    • 预处理:检查表或字段是否存在;将select * 中的*符号扩展为表上的所有列
    • 优化阶段:基于查询成本的考虑, 选择查询成本最小的执行计划;
    • 执行阶段:根据执行计划执行 SQL 查询语句,从存储引擎读取记录,返回给客户端;
 
 

MySQL的引擎

  1. InnoDB:InnoDB是MySQL的默认存储引擎,具有ACID事物支持,行级锁、外键约束等特性。适用于高并发的读写操作,支持较好的数据完整性金额并发控制
  1. MyISAM:MyISAM是mySQL另一种常见存储引擎,具有较低的存储空间和内存消耗,适用于大量读的场景。然而,MyISAM不支持事务、行级锁和外键约束,因此在并发写入和数据完整性方面有一定的限制。
  1. Memory:Memory引擎将数据存储在内存中,适用于对新能要求较高的读场景,但是服务器重启后,数据就会丢失。不支持事物、行锁和外键约束。
 
InnoDB引擎在事务支持、并发控制、崩溃恢复方面具有优势,因此MySQL选择为默认的存储引擎。
  1. 事务支持:InnoDB引擎提供对事务的支持,可以进行ACID操作。
  1. 并发性能:事务采用行级锁的机制,可以提供更好的并发性能。MyISAM是表锁。
  1. 崩溃恢复:InnoDB引擎通过redolog日志实现崩溃恢复,可以在数据库异常情况下,通过日志进行恢复,保证数据的持久性和一致性。
 

从数据文件视角看table和database

InnoDB引擎下,我们每创建一个 database(数据库) 都会在 /var/lib/mysql/目录里面创建一个以 database 为名的目录,然后保存表结构和表数据的文件都会存放在这个目录里。
文件
类型
核心作用
依赖关系
db.opt
数据库配置
数据库默认字符集 / 排序规则
影响表的默认字符集
t_order.frm
表结构元数据
表字段、索引、约束定义
无 .frm 则无法识别表结构
t_order.ibd
数据 / 索引存储
InnoDB 表的实际数据 + 索引
依赖 .frm 定义的表结构
 
Prev
【MySQL学习笔记】索引篇
Next
vLLM 初体验
Loading...
Article List
如果去做,还有一丝希望;但是不去做,就毫无希望
技术分享
个人总结
转发