MySQL学习-MySQL逻辑架构(一)
首先,从下图可以清楚的看到MySQL的基本架构。然后我们仔细分析各个部件的作用以及sql执行顺序及原理。
总体分三个大的部分:客户端,server层,存储引擎层。
server由连接器、分析器、优化器、执行器、查询缓存组成。
存储引擎有多种类型,最常用的是innoDB,MySQL5.5.5版本及以后默认存储引擎就是innodb(创建表的时候不指定存储引擎,MySQL就默认使用innodb引擎)。
下面介绍各个部件的功能:
连接器
作用:tcp握手建立连接--->认证用户--->获取用户权限信息--->管理连接
1、与客户端建立连接(TCP握手)。
2、根据连接的用户名密码认证用户是否合法,验证不通过则关闭连接。
3、根据建立连接的用户名从权限表获取该用户的权限信息。同一个用户每一次建立连接获取的权限信息将作用于这个连接的整个生命周期,即使在该用户建立连接的这段时间该用户的权限发生了变化,也不会影响当前没有断开的这次连接的权限。
4、管理已建立的连接 (根据参数wait_timeout的值,当连接空闲时间超过这个参数的设定值,连接将会被连接器自动断开)
命令:show processlist 可以查看当前建立的连接
mysql> show processlist;
+----+------+-----------------+------+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------------+------+---------+------+----------+------------------+
| 98 | root | localhost:62877 | NULL | Query | 0 | starting | show processlist |
+----+------+-----------------+------+---------+------+----------+------------------+
查询缓存
作用:以key-value的形式缓存执行过的查询结果,key--查询语句,value--查询结果。直到有一条更新语句执行后,关于更新的这张表的所有查询缓存将被全部清空。
1、如果是一张静态表,不经常做更新操作,使用查询缓存功能会大大的提高查询效率。
2、对于普通表经常会有更新操作的不建议使用查询缓存。
3、可以将参数query_cache_type 设置成DEMAND,不使用查询缓存功能。然后再需要使用查询缓存的语句中显示缓存该查询的结果。例如:select SQL_CACHE * from table where id=1;
4、整体来说,查询缓存弊大于利,MySQL8.0版本以后已经不支持查询缓存的功能。
分析器
作用:词法分析--->语法分析
例如:select * from user where id=1;
1、词法分析:根据关键字select识别出该语句是查询语句,根据from user 识别到要查询的表名是user,再根据user表的列名称对应到要查询的列id。
从这里可以知道如果sql语句的单词写的不正确或者根据表明找不到该表或者该表不存在该列名,此时将会报错。
2、语法分析:分析器会根据MySQL语法判断该语句是否符合语法。
优化器
作用:决定使用那个索引(如果存在多个索引),决定连接查询时候表的连接顺序
执行器
作用:权限校验--->根据表的引擎调用相应的引擎接口执行sql
执行器调用引擎接口获取所有符合条件的结果集返回,至此sql执行结束。
给大家推荐一个MySQL的实力课程,前阿里资深技术专家林晓斌的技术分享,总共45节课程,总时长大约12个小时。
花费12个小时时间从此不再害怕MySQL,从sql执行的每一个细节到MySQL的事物、索引、锁的机制的理解,将帮助你在工作中解决关于mysql的绝大部分问题。
从此不再问度娘这条sql怎么这么慢!!!哈哈哈
欢迎撩我,大家共同探讨学习MySQL。