【MySQL是怎么运行的一】逻辑架构

MySQL可以分为连接层、服务层和引擎层

连接层

  1. 客户端发起请求,MySQL服务器会从数据库连接池中取出一个线程对接,TCP三次握手后建立连接。
  2. 客户端发起身份验证(用户名、密码),验证失败:Access denied for user,验证成功则连接成功

服务层

**SQL api:**提供api供客户端调用,如crud

**缓存:**相同的请求缓存一份结果,因为命中率低,新版本MySQL已经废弃

**解析器:**将原始sql经过预发解析后生成语法树,会校验sql语法是否正确,用户是否有权限等

**优化器:**对sql进行优化处理,生成执行计划

sql 复制代码
CREATE TABLE s1
(
    id           INT AUTO_INCREMENT,
    key1         VARCHAR(100),
    key2         INT,
    key3         VARCHAR(100),
    key_part1    VARCHAR(100),
    key_part2    VARCHAR(100),
    key_part3    VARCHAR(100),
    common_field VARCHAR(100),
    PRIMARY KEY (id),
    KEY idx_key1 (key1),
    UNIQUE KEY idx_key2 (key2),
    KEY idx_key3 (key3),
    KEY idx_key_part (key_part1, key_part2, key_part3)
) ENGINE = INNODB
  CHARSET = utf8;

初始sql是这样的,不符合最左匹配原则

sql 复制代码
explain 
select *
from s2
where key_part2 = 'a'
  and key_part1 = 'b';

经过优化器优化后变为

sql 复制代码
explain
select *
from s2
where key_part1 = 'b'
  and key_part2 = 'a';

结果

引擎层

负责物理数据的读取和写入,直接与磁盘打交道,通过api与服务层交互

相关推荐
梦醒沉醉16 分钟前
HBase与MapReduce结合(一)——HBase表中插入数据
数据库·hbase·mapreduce
土豆炒马铃薯。26 分钟前
彻底卸载MySQL
java·开发语言·前端·数据库·mysql·删除·数据
瑞金彭于晏1 小时前
微服务架构与传统的单体架构有什么区别?微服务架构(Spring Cloud + Maven)强在哪?
spring cloud·微服务·架构
攻城狮_Dream1 小时前
基于 Python 的项目管理系统开发
android·数据库·python
昨今1 小时前
学习Flask:[特殊字符] Day 3:数据库集成
数据库·学习·flask
nixiaoge1 小时前
seacms v9 实现的MySQL注入
数据库·网络安全
无难事者若执2 小时前
知识图谱-Neo4j-开始构建知识图谱-01
数据库·知识图谱·neo4j
拓端研究室TRL2 小时前
R-INLA实现绿地与狐狸寄生虫数据空间建模:含BYM、SPDE模型及PC先验应用可视化...
开发语言·数据库·r语言
V+zmm101342 小时前
岳阳市美术馆预约平台(小程序论文源码调试讲解)
java·数据库·微信小程序·小程序·毕业设计
北珣.3 小时前
MySQL增删改查(进阶)
数据库·mysql·oracle