mysql学习总结(一)
mysql逻辑架构
1. Server层
包括连接器、查询缓存、分析器、优化器、执行器等。
1.1连接器
连接器负责跟客户端建立连接、获取权限、维持和管理连接。
1.2查询缓存
如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。
大多数情况下不建议使用查询缓存:查询缓存的失效非常频繁,只要有对一个表的更新,这个表的所有查询缓存都会被清空。在MySQL8.0版本后将查询缓存的整块功能删掉了。
1.3分析器
对SQL语句进行解析:
1、分析器先会做“词法分析”,分析SQL语句里面的字符串分别是什么,代表什么。比如select id from t; 把t识别成表名t,将id识别成列id。
2、“词法分析”结束后,开始“语法分析”,根据词法分析的结果,语法分析器会根据语法规则判断输入的SQL语句是否符合MySQL语法。
1.4优化器
优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联的时候,决定各个表的连接顺序。
1.5执行器
MySQL通过执行器开始执行SQL语句。开始执行时,首先判断对这个表有没有执行查询的权限,如果没有就会返回没有权限的错误(如果命中查询,会在查询缓存返回结果的时候,做权限验证),如果有权限,就打开表继续执行。
select * from T where id = 10;
执行器的执行流程:
1、调用InnoDB引擎接口取这个表的第一行,判断id值是否为10,如果不是则跳过,如果是则将这行存在结果集中。
2、调用引擎接口读取下一行,重复判断,直到取到这个表的最后一行。
3、执行器将上述遍历过程中所有满足条件组成的记录集作为结果集返回给客户端
如果表有索引,则第一次调用取的是满足条件的第一行,后面每次取都是取满足条件的下一行。
2. 存储引擎层
负责数据的存储和提取。其架构模式是插件式的,支持InnoDB、MyISAM、Memory等多个存储引擎。InnoDB从MySQL5.5.5版本开始成为默认存储引擎。
练习题
1、MySQL框架有几个组件,各是什么作用?
五个组件:连接器、查询缓存、分析器、优化器、执行器
作用:
2、Server层和存储引擎层各是什么作用?
Server层:涵盖MySQl的大多数核心服务功能,以及所有的内置函数(比如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。
存储引擎层:负责数据的存储和提取。
3、you have an error in your SQL syntax 这个报错是在词法分析还是在语法分析里报错?
语法分析
4、对于表的操作权限验证在哪里进行?
执行器,优化器
5、执行器的执行查询语句的流程是什么样的?
执行器的执行流程:
1、调用InnoDB引擎接口取这个表的第一行,判断id值是否为10,如果不是则跳过,如果是则将这行存在结果集中。
2、调用引擎接口读取下一行,重复判断,直到取到这个表的最后一行。
3、执行器将上述遍历过程中所有满足条件组成的记录集作为结果集返回给客户端
如果表有索引,则第一次调用取的是满足条件的第一行,后面每次取都是取满足条件的下一行。