MySQL 基本架构

MySQL 基本架构:

在这里插入图片描述
从图中可以看出,分为服务器层、跟存储引擎层两部分:

一、服务器层:

连接器:
  • 管理连接、权限验证

连接器负责跟客户端建立连接,获取权限,维持,管理连接:

mysql -h$ip -p$port -u$user -p

在命令中mysql是客户端工具,用来跟服务器端建立连接,在完成经典的TCP握手后,连接器就开始认证身份,输入用户、密码进行登录:

查看连接状态:

show processlist
+----+------+-----------------+------+---------+------+----------+------------------+
| Id | User | Host            | db   | Command | Time | State    | Info             |
+----+------+-----------------+------+---------+------+----------+------------------+
|  3 | root | localhost:57819 | NULL | Sleep   |    0 | starting | show processlist |
+----+------+-----------------+------+---------+------+----------+------------------+

“Sleep” 就表示系统里有空闲连接

建立长连接时,MySQL内存涨的特别快,如何解决?
  • 定期断开长连接,使用一段时间,或者程序里面判断执行过一个占用内存大的查询后,断开连接,之后再查询再重连;
  • 如果使用MySQL-5.7版本以上,在每次执行一个较大操作后,通过执行mysql_reset_connection来重新初始化连接资源。这个过程不需要重连和重新验证;
查询缓存:
  • 命中直接返回结果

MySQL获取一个查询请求后,会先到查询缓存看看,之前是不是执行过这条语句。

执行语句,结果,会以Key-Value对 形式,直接缓存在内存中:

  • Key:查询语句

  • Value:查询结果

    若查询直接在缓存中找到Key,那么Value就被直接返回给客户端;

不建议使用查询缓存:

只要对一个表更新,那么表上所有查询缓存都会被清空。除非使用一张静态表,很长时间才会更新。

配置参数query_cache_type设置成DEMAND,这样默认的SQL语句都不使用查询缓存:

查询是否开启查询缓存:

mysql> SELECT @@query_cache_type;
+--------------------+
| @@query_cache_type |
+--------------------+
| OFF                |
+--------------------+
1 row in set, 1 warning (0.01 sec)

query_cache_type 有3个值:

0:表示关闭查询缓存(OFF)

1:表示开启查询缓存(ON)

2:代表当sql语句中有SQL_CACHE关键词才缓存,如下

select SQL_CACHE * from Table where ID=10;

MySQL 8.0版本开始,删除查询缓存整块功能;

分析器:
  • 执行计划生产、索引选择

分析器先会做词法分析:

  • 由多个字符、空格组成字符串,要识别出里面字符串分别是什么?代表什么?

    “SELECT” 这个关键字识别,这是一个查询语句

在做语法分析:

  • 根据语法规则,判断输入的SQL语句是否满足MySQL语法:

    语法不对,You have an error in your SQL syntax 错误提醒

优化器:
  • 执行计划生产、索引选择

优化器,在表里面有多个索引,决定使用哪个索引,或者一个语句有多表关联时,决定各个表连接顺序。作用就是决定选择使用哪一个方案,并用最小的代价去执行语句

执行器:
  • 操作引擎、返回结果
select * from T where ID=10;

1.开始执行时,需要判断你对这个表T是否有执行查询权限;

  • 如果命中查询缓存,会在查询缓存返回结果的时候,做权限验证

2.如果有权限,打开表继续执行,执行器会根据表的引擎定义,去使用这个引擎提供接口;

3.调用引擎接口,取"一下行",重复相同的判断逻辑,直到取到这个表的最后一行;

5.执行器将上述遍历过程中,所有满足条件的行组成记录集,作为结果集返回给客户端;

内置函数(日期、时间),存储过程,触发器,视图等,都是再服务层实现;

二、存储引擎层:

存储引擎:
  • 存储数据,提供读写接口

支持InnoDB,MyISAM、Memory(内存型存储引擎)等,从MySQL-5.5.5版本开始InnoDB成为默认存储引擎;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值