MySQL逻辑架构与存储引擎
SQL语句的执行流程。
MySQL逻辑架构
- 客户端和服务器端建立连接,客户端发送 SQL 至服务器端;
- 对 SQL 语句进行查询处理;与数据库文件的存储方式无关;
- 与数据库文件打交道,负责数据的存储和读取。
SQL语句执行流程
- 查询缓存:Server 如果在查询缓存中发现了这条 SQL 语句,就会直接将结果返回给客户端;如果没 有,就进入到解析器阶段。因为查询缓存往往效率不高,所以在 MySQL8.0 之后就抛弃了这个功能。在 MySQL 中的查询缓存,不是缓存查询计划,而是查询对应的结果。两个查询请求在任何字符上的不同(如空格、注释、大小写)都会导致缓存不命中。
- 解析器:在解析器中对 SQL 语句进行语法分析、语义分析,生成语法树。
- 优化器:在优化器中会确定 SQL 语句的执行路径,比如是根据全表检索 ,还是根据 索引检索等,生成一个执行计划。
- 执行器:执行查询。
SQL 语句在 MySQL 中的流程是: SQL语句→查询缓存(MySQL8.0之前)→解析器→优化器→执行器 。
MySQL8查看SQL执行
- 确认profiling是否开启
1 | select @@profiling; |
- 多次执行一个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为主的应用。
MySQL逻辑架构与存储引擎