全面理解MySQL架构
目录学前目标一条查询SQL是如何执行的mysql组成架构客户端服务端完整执行流程一条更新SQL是如何执行的学前目标掌握 MySQL 整体架构划分清晰区分 Server 层和存储引擎层的功能与核心组件理解一条 SQL 查询 / 更新语句的完整执行流程掌握 MySQL 中核心日志redo log、binlog、undo log的特性、作用及协同工作机制理解 WAL 技术和两阶段提交的设计原因与实现逻辑理解 crash-safe、数据恢复的底层原理为后续索引优化、事务调优、集群搭建打下基础一条查询SQL是如何执行的mysql组成架构客户端主要用于连接 MYSQL 服务向服务器端发送 SQL 语句一般指的是常用的 SQL 连接客户端如 DBeaver等。服务端server连接器与客户端进行连接默认端口为3306同时验证权限查询缓存8.0废除5.7独有有弊端分析器做语法与词法分析优化器执行计划生成选索引执行器操作引擎返回结果日志系统server层独有记录数据库除了select 与 show 之外的增删改操作用于数据复制与恢复存储引擎负责数据存储与检索插件式插入MYSQL中常见存储引擎包括MYISAM与INNODB,默认是INNODB支持事务独有的日志系统redo log与undo log前者讲究持久性用于数据的恢复后者讲究原子性支持MVCC行级锁定与外检约束完整执行流程①客户端发送SQL请求与连接器建立经典的TCP连接此时连接器会管理连接并验证权限(用户名和密码)相关命令:mysql-uroot-p123456若客户端对服务器端在默认的8小时之内没有任何请求操作连接会自动断开。连接过程复杂使用时尽量减少建立连接的动作可以使用长连接在JAVA中一般使用数据库连接池来处理数据库连接高并发操作。长连接多个请求复用一条连接保持长时间不断开短连接执行很少查询后就断开反反复复建立连接耗资源②查询缓存5.7版本数据库查询后会直接查询缓存keyvaluecunxhu 缓存命中直接返回没有命中执行后面操作8.0没有查询缓存为啥因为生产环境下对于修改多的系统缓存命中低只要有修改缓存就失效并且缓存需要锁开销也大。③分析器缓存未命中分析器执行进行词法与语法分析词法分析判断SQL语句中提取的关键字表结构是否在information_schema存在语法分析整条SQL是否符合规范。④优化器对这条SQL查询多个查询方案选出最合适的比如有多个索引就选出最合适的索引多表关联查询选出最佳查询顺序。select*fromt1joint2using(ID)wheret1.c10andt2.d20;先匹配 t1.c10的ID值然后根据这个ID去 t2找出d20的先匹配 t2.d20的ID值然后根据这个ID去 t1找出c10的此时优化器会根据量表数据的多少来选择⑤执行器执行前判断当前用户是否有执行权限因为执行前可能会有一些第三方临时表也需要权限有权限直接调用存储引擎返回结果。一条更新SQL是如何执行的更新语句与查询语句基本差不多也是先查缓存缓存没有就在磁盘查出要更新的行数据后分析器分析是更新语句优化器找出索引执行器执行更新。区别就是涉及到两种日志binlog与redolog
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2426691.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!