Mysql逻辑架构,Sql查询语句执行流程,更新语句更新流程

文章目录

    • MySQL常用存储引擎
      • InnoDB引擎:
      • MyISAM引擎:
    • 一条SQL更新语句的执行流程:
    • 一条SQL查询语句是如何执行的?


Mysql 逻辑架构 --- **注**:优化器优化内容:比如如果数据量比较少的时候,虽然可以走二级索引,但是二级索引还有回表,速度还不如进行聚簇索引的扫描,这时优化器就就会优化一下不走二级索引了

Mysql逻辑架构,Sql查询语句执行流程,更新语句更新流程_第1张图片




Mysql逻辑架构,Sql查询语句执行流程,更新语句更新流程_第2张图片


MySQL逻辑架构整体分为三层:

客户端层,连接处理、授权认证、安全等功能均在这一层处理。
核心服务层,包括查询解析、分析、优化、缓存、内置函数(比如:时间、数学、加密等函数)。所有的跨存储引擎的功能也在这一层实现:存储过程、触发器、视图等。
存储引擎,其负责MySQL中的数据存储和提取。和Linux下的文件系统类似,每种存储引擎都有其优势和劣势。中间的服务层通过API与存储引擎通信,这些API接口屏蔽了不同存储引擎间的差异



MySQL常用存储引擎

这里主要介绍InnoDB引擎和MyISAM引擎,其它引擎后文会单独介绍

InnoDB引擎:

将数据存储在表空间中,表空间由一系列的数据文件组成,由InnoDB管理;
支持每个表的数据和索引存放在单独文件中(innodb_file_per_table);
支持事务,采用MVCC来控制并发,并实现标准的4个事务隔离级别,支持外键;
索引基于聚簇索引建立,对于主键查询有较高性能;
数据文件的平台无关性,支持数据在不同的架构平台移植;
能够通过一些工具支持真正的热备。如XtraBackup等;
内部进行自身优化如采取可预测性预读,能够自动在内存中创建hash索引等

MyISAM引擎:

不支持事务和行级锁;
提供大量特性如全文索引、空间函数、压缩、延迟更新等;
数据库故障后,安全恢复性差;
对于只读数据可以忍受故障恢复,MyISAM依然非常适用;
日志服务器的场景也比较适用,只需插入和数据读取操作;
不支持单表一个文件,会将所有的数据和索引内容分别存在两个文件中;
MyISAM对整张表加锁而不是对行,所以不适用写操作比较多的场景;
支持索引缓存不支持数据缓存。


一条SQL更新语句的执行流程:

  1. 执行器先找引擎取 ID=2 这一行。ID 是主键,引擎直接用树搜索找到这一行。如果ID=2 这一行所在的数据页本来就在内存中,就直接返回给执行器;否则,需要先从磁盘读入内存,然后再返回
  2. 执行器拿到引擎给的行数据,把这个值加上 1,比如原来是 N,现在就是 N+1,得到新的一行数据,再调用引擎接口写入这行新数据。
  3. 引擎将这行新数据更新到内存中,同时将这个更新操作记录到 redo log 里面,此时redo log 处于 prepare 状态。然后告知执行器执行完成了,随时可以提交事务。
  4. 执行器生成这个操作的 binlog,并把 binlog 写入磁盘。
  5. 执行器调用引擎的提交事务接口,引擎把刚刚写入的 redo log 改成提交(commit)状态,更新完成
    Mysql逻辑架构,Sql查询语句执行流程,更新语句更新流程_第3张图片

一条SQL查询语句是如何执行的?

一条SQL查询语句是如何执行的?
连接器:TCP连接,权限(查出当前用户拥有的权限)
查询缓存:命中直接返回;在8.0版本后去除查询缓存了
分析器: SQL 解析、分析语法是否正确,预处理,生成合法的解析树
优化器:优化器生成对应的执行计划
执行器:根据执行计划,调用对应的存储引擎的 API 来执行,并将执行结果返回

优化器:优化:比如如果数据量比较少的时候,虽然可以走二级索引,但是二级索引还有回表,速度还不如进行聚簇索引的扫描,这时优化器就就会优化一下不走二级索引了

Mysql逻辑架构,Sql查询语句执行流程,更新语句更新流程_第4张图片


你可能感兴趣的:(Mysql,sql,mysql)