简单了解Mysql 体系结构,MYSQL是如何执行一条SQL的
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默认存储引擎,支持事务,行级锁,聚集索引,支持外键。 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |