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

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

发布时间:2022-11-09 11:01:45 所属栏目: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)。
 
  2、SQL执行的几个阶段
 
  阶段一:客户端/服务端通信;
 
  阶段二:查询缓存;
 
  阶段三:查询优化处理;
 
  阶段四:调用查询存储引擎;
 
  阶段五:返回客户端结果集;
 
  第一阶段客户端/服务端通信
 
  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%’;
 
  阶段三 :查询优化处理
 
  查询处理阶段主要包括解析器对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默认存储引擎,支持事务,行级锁,聚集索引,支持外键。
 

(编辑:开发网_新乡站长网)

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