加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

简单了解Mysql 体系结构,MYSQL是如何执行一条SQL的

发布时间:2022-10-20 14:02:12 所属栏目:MySql教程 来源:互联网
导读: 1、mysql体系结构
Mysql 总体的设计体系结构可分为三层
1、连接层:客户端(Client connettion)、系统管理(Management Serveices & Utilities)、连接池管理(Connection Pool)。
2、解析层

1、mysql体系结构

Mysql 总体的设计体系结构可分为三层

1、连接层:客户端(Client connettion)、系统管理(Management Serveices & Utilities)、连接池管理(Connection Pool)。

2、解析层:SQL接口(SQL Interface),缓存(Cache)、解析器(Parser)、优化器(Optimizer)。

3、数据层:存储引擎(Engine)、文件(File)、日志(Log)。

mysql系统_mysql 系统时间命令_jsp mysql设计系统

2、SQL执行的几个阶段

阶段一:客户端/服务端通信;

阶段二:查询缓存;

阶段三:查询优化处理;

阶段四:调用查询存储引擎;

阶段五:返回客户端结果集;

mysql 系统时间命令_mysql系统_jsp mysql设计系统

第一阶段客户端/服务端通信

Mysql 客户端和服务端通信方式是采用“半双工”的通信方式。

关于单双工、半双工、全双工?

单双工:指数据传输时不能实现双向通信,只能向一个方向发送数据,一方只能发送另一方就只能接收数据(比如广播);

半双工:指数据传输时可以实现双向通信,但是同一个时刻只能允许数据在一个方向进行传输,通信时一方必须发送或者接收完才能执行一下步的操作(比如:对讲机)

全双工:指数据传输时可以实现双向通信,双方通信时有两条通道,一个通道负责发送,一个通道进行接收,可以同时处理发送和接收数据的功能(比如:电话)

jsp mysql设计系统_mysql系统_mysql 系统时间命令

查看客户端与服务端的连接状态

指令:Show processlist 或者 show full processlist

阶段二:查询缓存

当Mysql接收到一条查询语句时,会先去缓存进行查询,如果找到对应查询语句数据就直接把数据返回给客户端。

缓存命中要求:SQL语句完全匹配;

比如:select * from user where id=1 必须要求该条SQL语句完全一致,多一个空格都不行;

缓存什么时候失效:

1、缓存数据的对应表数据被修改了,那么对应查询语句的缓存信息会失效。

2、缓存满了后剔除对应的数据。

相关指令:

查看缓存状态:Show variables like ‘query_cathe%’;

开启/关闭缓存:set query_cache_type =ON/set query_cache_type =OFF;

在SQL中指定不使用缓存:select SQL_NO_CACHE * from table;

查看缓存命中情况:Show status like ‘Qcache%’;

mysql 系统时间命令_mysql系统_jsp mysql设计系统

阶段三 :查询优化处理

查询处理阶段主要包括解析器对SQL解析处理然后优化SQL生成执行计划;

Parser解析器对SQL解析

通过SQL的关键字将SQL分解成对应规则的数据结构(解析树),然后使用MYSQL的语法验证规则对SQL语法规则进行验证(如关键字、语法、关键字顺序);

Optimizer: 查询优化器

当语法验证通过之后,优化器会将SQL进行分析,通过随机数据的抽选查询成本的计算,最后从众多执行计划中选择一条最优的执行计划;

查询优化器原则

覆盖索引扫描

如:select id from user_info 当id列是索引时,将直接返回索引的数据,而不需要去查询具体的表数据。

等值传播

如:where b>a and a=5 改成 b>5 and a=5;

IN的优化

把or 转成in(),mysql中对in进行了优化,首先对in 里面的参数进行排序,然后会进行二分法匹配优化。

关联查询优化

将可转换的外连查询转为内连。

还有子查询优化,提前终止查询 策略等等。

阶段四 :查询执行引擎

查询优化阶段生成了对应的执行计划后,mysql根据对应的执行计划调用存储引擎API 执行查询。

阶段五 :返回客户端结果集

一旦Mysql 查询到一条数据结果集就会向客户端逐步返回数据,这样避免了服务端缓存太多的查询结果,就算没有查询到任何结果集也会向客户端返回一些信息(比如像该查询影响的行数数据);

如果开启了缓存,mysql会同时向缓存里面保存查询结果。

3、几种存储引擎的区别

1、CSV

主要用户导入导出数据mysql系统,文件格式.csv,因为可随意通过修改文件从而修改数据库数据,所以安全性很低。

2、Archive

压缩数据格式的数据引擎,数据格式.arz, 支持持insert,select 不支持事务,用于数据备份。

3、Memory|heap

数据存储在内存中,大小限制只有16M,主要用于临时表,如果数据大于16M则使用Myisam作为临时表。

4、Myisam

不支持事务,锁为表级锁,索引为非聚簇索引。

5、INNODB

Mysql默认存储引擎,支持事务,行级锁,聚集索引,支持外键。

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!