阿里巴巴网站建设的背景,海南注册家族公司条件,wordpress最新编辑器,项目网课商城数据库架构
数据库对于后端程序员来说是每天都需要打交道的系统#xff0c;因此了解并掌握MySQL底层原理是必须的。
基础架构图
MySQL内部分为两层#xff0c;一个是Server层#xff0c;另一个是存储引擎层#xff0c;而我们常用的就是MyISAM、InnoDB#xff0c;主要负…数据库架构
数据库对于后端程序员来说是每天都需要打交道的系统因此了解并掌握MySQL底层原理是必须的。
基础架构图
MySQL内部分为两层一个是Server层另一个是存储引擎层而我们常用的就是MyISAM、InnoDB主要负责数据的读取和存储。
连接器
连接器其实比较好理解我们编写的程序Java、go 通过客户端程序去连接需要提供ip端口账号密码。通过网络TCP建立网络通信后连接器授信根据提供的账号密码进行验证是否存在如果不存在的话。
1045 - Access denied for user root1localhost (using password: YES)会抛出以上异常代表账号密码不正确。如果账号密码连接正确就会到权限表查看对应用户的权限依赖此时读取到的权限。 连接成功后如果没有操作默认有8h的连接时间超过这个时间后就会连接失效。默认就是8小时/。。 创建连接这种动作是比较耗费系统资源的所以在实际的应用中我们会创建长连接来避免频繁的短连接操作。
查询缓存
如果成功创建连接之后那么就会先到缓存中查询是否存在数据有的话直接返回。具体的结构是 key,valuekey对应查询SQL语句value对应数据结果。如果没有的话直接执行后续流程拿到数据将数据放到缓存中。 什么场景比较适合查询缓存呢 其实对于大多数的应用老说都不建议开启查询缓存因为只要存在对表数据以及结构操作那么缓存数据就会失效。缓存命中率会比较低所以一般不建议开启。除非是那种静态配置表_config之类的可以使用。
query_cache_type DEMAND 以上配置不会走查询缓存 不过需要注意的是mysql 8.0之后不在提供查询缓存。
分析器
如果从查询缓存中获取不到数据那么就直接开始执行SQL但是需要先解析SQL先词法分析获取这个SQL要做什么然后语法分析是否符合SQL规范。如果不符合会抛出 一般语法错误会提示第一个出现错误的位置所以你要关注的是紧接“use near”的内容。
优化器
分析器可以获取到要做什么到优化器这里就是觉得表里有多个索引的时候应该选择哪个或者lefo join的时候应该先选择哪个表的数据进行执行。到这里语句的执行方案就确定下来。
执行器
Mysql到这里通过分析器知道要做什么优化器知道如何去做 会根据之前定义的存储引擎调用存储引擎接口执行SQL如果查询的是namexx’的数据没有索引的前提下会全标扫描一行行取出来符合的数据放到res中最后返回结果所以rows_examined存储引擎扫描的行数可能存在执行期调用了一次但是存储引擎执行了多行。
存储引擎
目前主流的都是InnoDB存储引擎InnoDB内存有page页存储数据的一页64KB
执行流程 资料来源极客时间mysql 45讲