MySQL逻辑架构与存储引擎

SQL语句的执行流程。

MySQL逻辑架构

  1. 客户端和服务器端建立连接,客户端发送 SQL 至服务器端;
  2. 对 SQL 语句进行查询处理;与数据库文件的存储方式无关;
  3. 与数据库文件打交道,负责数据的存储和读取。

SQL语句执行流程

  1. 查询缓存:Server 如果在查询缓存中发现了这条 SQL 语句,就会直接将结果返回给客户端;如果没 有,就进入到解析器阶段。因为查询缓存往往效率不高,所以在 MySQL8.0 之后就抛弃了这个功能。在 MySQL 中的查询缓存,不是缓存查询计划,而是查询对应的结果。两个查询请求在任何字符上的不同(如空格、注释、大小写)都会导致缓存不命中。
  2. 解析器:在解析器中对 SQL 语句进行语法分析、语义分析,生成语法树。
  3. 优化器:在优化器中会确定 SQL 语句的执行路径,比如是根据全表检索 ,还是根据 索引检索等,生成一个执行计划。
  4. 执行器:执行查询。

SQL 语句在 MySQL 中的流程是: SQL语句→查询缓存(MySQL8.0之前)→解析器→优化器→执行器 。

MySQL8查看SQL执行

  • 确认profiling是否开启
1
2
select @@profiling;
set profiling=1;
  • 多次执行一个SQL查询
  • 查看profiles
1
show profiles;
  • 查看某一条具体的执行步骤:
1
show profile for query 5;

可以看到没有查询缓存。

存储引擎

InnoDB引擎:具有外键支持功能的事务存储引擎

  • InnoDB是MySQL的 默认事务型引擎 ,它被设计用来处理大量的短期(short-lived)事务。可以确保事务的完整提交(Commit)和回滚(Rollback)。
  • 除了增加和查询外,还需要更新、删除操作,那么,应优先选择InnoDB存储引擎。
  • 对比MyISAM的存储引擎, InnoDB写的处理效率差一些 ,并且会占用更多的磁盘空间以保存数据和索引。
  • MyISAM只缓存索引,不缓存真实数据;InnoDB不仅缓存索引还要缓存真实数据, 对内存要求较 高 ,而且内存大小对性能有决定性的影响。

MyISAM引擎:主要的非事务处理存储引擎

  • MyISAM 不支持事务、行级 锁、外键 ,崩溃后会无法恢复。
  • MySQL5.5之前默认的存储引擎。
  • 优势是访问的速度快 ,对事务完整性没有要求或者以SELECT、INSERT为主的应用。
Author

叶润繁

Posted on

2022-02-17

Licensed under