首页 > 数据库 >MySQL 内部Server 层机制

MySQL 内部Server 层机制

时间:2023-11-10 12:03:28浏览次数:39  
标签:语句 缓存 MySQL 分析器 Server SQL 机制 查询

主要包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。

1.连接器

像navicat、JDBC、MySQL等客户端软件需要先和mysql建立通信之后,才能对其中的SQL进一步执行,连接器就是服务层负责和客户端建立连接的工作。

连接器负责和客户端建立连接、获取权限、维持和管理连接。连接命令:

mysql ‐h host[数据库地址] ‐u root[用户] ‐p root[密码] ‐P 3306

mysql通过三次握手后,通过用户名和密码校验权限,一旦建立了连接,后续即使修改了该用户的权限也不会影响此次连接的权限。

2.查询缓存

建立连接后执行的select语句,会优先查询缓存是否存在同一条语句的缓存,先前执行过的语句会被缓存以Key-Value的形式到内存中,如果存在直接返回结果,如果不存在则执行后续流程;mysql8.0默认是关闭的。

为什么大多数情况下查询缓存用不到?

只要对表更新(增删改),关于这张表的查询缓存会全部被清空。

因此我们可以相对应的对一些更新极少的表使用查询缓存,如:系统配置表,字典表。

 my.cnf
2 #query_cache_type有3个值 0代表关闭查询缓存OFF,1代表开启ON,2(DEMAND)代表当sql语句中有SQL_CACHE关键
词时才缓存
3 query_cache_type=2

这样默认不使用查询缓存,需要使用时添加 SQL_CACHE 字段指定:

select SQL_CACHE * from test where ID=5;

查看当前MySQL是否开启了缓存

 show  variables like "%query_cache_type%";

MySQL 内部Server 层机制_MySQL

很明显,查询缓存是关闭的。

3.分析器

当缓存中没有的相应的语句,就要开始执行SQL语句,首先需要分析器分析SQL语句;

SQl语句是我们人类方便写和读所有的语言,而计算机不会识别,分析器将SQL语句中的字符串字段转化为mysql可以识别的列名和表名;同时也可以判断SQL语句语法是否正确。

4.优化器

经过分析器转化后,SQL转化为MySQL可以识别和执行的语句,优化器是表里有多个索引时决定采用最优索引;例如当查询一个数据较小的表时,即使有索引,也不一定会走索引,很大概率会全表扫描;MySQL内部优化机制都会在这一步执行。

5.执行器

执行前首先判断有没有权限,有权限会根据引擎层提供的接口使用接口。

标签:语句,缓存,MySQL,分析器,Server,SQL,机制,查询
From: https://blog.51cto.com/u_16280730/8294953

相关文章

  • MySQL8
    MySQL8.0:窗口函数一、MySQL8.0窗口函数概述1、什么是窗口函数窗口函数是类似于可以返回聚合函数值的函数,例如SUM(),COUNT(),MAX()。但是窗口函数又与普通的聚合函数不一样,它不会对结果进行分组,使输出中的行数和输入中的行数相同。窗口函数示例:selectsum()over(partitionby_......
  • 为zabbix_server_docker容器安装Python 3完善机器人告警脚本环境
    1.安装Python3dnfinstallpython3 2.要验证安装,请输入以下命令检查Python版本:python3--version 3.建立软连接:ln-s/usr/bin/python3.6/usr/bin/python  4.安装epel:dnfinstallpython3-devel-y 5.启用epel:dnfins......
  • windows系统上如何给mysql导入数据库和表
    1.连接数据库2.输入密码3.进入数据库4.创建数据库 createdatabase数据库名;5.进入数据库use  数据库名;6.查看当前所在数据库selectdatabase();7.把需要导入的数据库放到没有中文名的路径下面(蜜蜂这里放D盘了),之后使用SOURCE导入SOURCE数据库的位置/需要导入的数据库名称(中间......
  • mysql基本使用
    MySQL常用图形化工具:NavicatSqlyogMysqlworkbend(msi自动安装) //////////////////////////////////////////////////////////Mysql数据库基本操作1、ddl数据定义语言对数据库的常用操作 l 查看所有的数据库:showdatabases;l 创建数据库:createdatabase[i......
  • Sql server 删除重复记录的SQL语句
     有两个意义上的重复记录:1.完全重复的记录,也即所有字段均重复的记录.2.部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。1、对于第一种重复,比较容易解决,使用selectdistinct*fromtableName就可以得到无重复记录的结果集。如果该表需要删除重复......
  • datax抽取mysql数据到hive报错:javax.net.ssl.SSLException: Connection reset
    datax抽取mysql数据报错:[INFO]2023-11-0912:35:14.090+0000-->2023-11-0920:35:13.492[0-0-0-reader]ERRORReaderRunner-ReaderrunnerReceivedExceptions:com.alibaba.datax.common.exception.DataXException:Code:[DBUtilErrorCode-07],Description:[......
  • 复制集机制及原理
    复制集的作用数据分发:将数据从一个区域复制到另一个区域读写分离:读写折分到不同的结点异地灾备:中心结点故障时自动转移到灾备结点典型复制集结构由3个及以上据有投票权的结算构成一个主结点,接受数据写入及进行投票二个及以上从节点,从主结点读取数据及进行投票不推荐使......
  • 远程连接 Mysql 失败的解决方法
    今天在虚拟机Ubuntu上折腾了一晚上mysql,然后试着用java连接,搞了很久都没成功,但是同学配好的Debian上却连接成功了,也就是说我的配置有问题。折腾了很久,最后还是通过理解异常信息来大致猜测。远程连接是输入mysql所在主机的IP和端口来确定主机的逻辑地址,再通过用户和密码来确定登......
  • 线上SQL超时场景分析-MySQL超时之间隙锁
    前言之前遇到过一个由MySQL间隙锁引发线上sql执行超时的场景,记录一下。背景说明分布式事务消息表:业务上使用消息表的方式,依赖本地事务,实现了一套分布式事务方案消息表名:mq_messages数据量:3000多万索引:create_time和statusstatus:有两个值,1和2,其中99%以上的状态都是2,表......
  • mysql产生临时表的原因有哪些?
    mysql产生临时表的原因有哪些?排序操作:如果查询语句中包含了ORDERBY子句,MySQL就会使用临时表来存储排序结果。分组操作:如果查询语句中包含了GROUPBY子句,MySQL就会使用临时表来存储分组结果。连接操作:如果查询语句中包含了JOIN子句,MySQL可能会使用临时表来存储连接结果。子查......