mysql之一条mysql语句时如何执行的

news2024/11/26 7:30:06

在这里插入图片描述

  1. 请把连接器的功能说明一下?
    连接器负责建立客户端和mysql服务器之间的连接.当客户端在中断输入连接命令(mysql -h -u -p),传输层使用tcp协议,通过三次握手建立连接.
    如果mysql服务服务没有启动,会报错:
    在这里插入图片描述
    如果mysql服务正常启动,完成三次握手,在传输层建立连接后,会进行密码验证,如果密码错误,会报错
    在这里插入图片描述
    如果密码没有问题,会获取用户权限,然后保存.本连接内所有后续操作都会根据这个权限.

  2. 为什么建立连接后,修改权限,并不生效.
    因为建立本次连接后,用户的权限会被保存在服务器,后续权限修改并不会影响本次连接.下一次连接才能生效.

  3. 使用抓包工具抓取一下mysql建立连接的过程
    在这里插入图片描述

  4. 查看mysql的连接数目

mysql> show processlist;
+----+------+-----------------------+------+---------+------+-------+------------------+
| Id | User | Host                  | db   | Command | Time | State | Info             |
+----+------+-----------------------+------+---------+------+-------+------------------+
|  2 | root | DESKTOP-VIMUU8E:64247 | NULL | Query   |    0 | NULL  | show processlist |
|  4 | root | localhost:64503       | NULL | Sleep   |   59 |       | NULL             |
+----+------+-----------------------+------+---------+------+-------+------------------+
2 rows in set (0.00 sec)

其中任意一个客户端(有权限)可以强制断开其它(或自己的)连接,断开后并不会通知那个用户

kill connection+2;

2 用户再次执行查询,先先显示错误信息,然后重新连接

mysql> show processlist;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    5
Current database: *** NONE ***

+----+------+-----------------------+------+---------+------+-------+------------------+
| Id | User | Host                  | db   | Command | Time | State | Info             |
+----+------+-----------------------+------+---------+------+-------+------------------+
|  4 | root | localhost:64503       | NULL | Sleep   |    5 |       | NULL             |
|  5 | root | DESKTOP-VIMUU8E:64594 | NULL | Query   |    0 | NULL  | show processlist |
+----+------+-----------------------+------+---------+------+-------+------------------+
2 rows in set (0.17 sec)

查看mysql的醉的连接数

```mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 100   |
+-----------------+-------+
1 row in set (0.01 sec)
  1. 如何解决长连接占用内存的情况
    1. 定期断开长连接
    2. 客户端主动重置连接
      怎么解决长连接占用内存的问题?

有两种解决方式。

第一种,定期断开长连接。既然断开连接后就会释放连接占用的内存资源,那么我们可以定期断开长连接。

第二种,客户端主动重置连接。MySQL 5.7 版本实现了 mysql_reset_connection() 函数的接口,注意这是接口函数不是命令,那么当客户端执行了一个很大的操作后,在代码里调用 mysql_reset_connection 函数来重置连接,达到释放内存的效果。这个过程不需要重连和重新做权限验证,但是会将连接恢复到刚刚创建完时的状态
7. mysql数据包的内容
在这里插入图片描述

查询缓存

  1. 在mysql 8.0以前,服务器端接收到刻画段传送来的命令,如果是查询命令,会去查询查询缓存,查询缓存是k-v结构,k为查询命令,如果找到,返回给客户端.
    为什么8.0废弃.
    因为只要表变动了,关于这个表的所有查询缓存都要删除.如果是经常变动的表,查询缓存命中率很低.

解析sql

先进行词法分析,构建SQL语法树,根据构建的语法树,进行语法分析,根据语法规则,判断输入的SQL语句书否正确.
在这里插入图片描述

执行sql

  1. select语句的执行分为几个阶段
    1. prepare阶段–预处理阶段
    2. optimize阶段—查询优化阶段
    3. execute阶段
  2. prepare阶段做了什么事情(8.0)
    1. 检查表是否存在,检查要查询的各列是否在表中实现机制是什么
    2. 将select * 中的*转换为列
  3. 优化器的作用
    查询优化器将SQL语句的执行顺序确定下来,选择成本低的索引.
  4. 实验: 不同的查询语句,查看不同的执行计划
    创建数据库 表 插入数据
CREATE DATABASE `xiaolin`; 
CREATE TABLE `xiaolin`.`user`( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(255), `age` INT, PRIMARY KEY (`id`) );
/*[19:17:47][6 ms]*/ INSERT INTO `xiaolin`.`user` (`id`, `name`, `age`) VALUES ('1', '张三', '10'); 
/*[19:17:58][33 ms]*/ INSERT INTO `xiaolin`.`user` (`name`, `age`) VALUES ('李四', '12'); 

查看执行计划

mysql> use xiaolin;
Database changed
mysql> explain select * from user where id=1;
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+
| id | select_type | table | type  | possible_keys | key     | key_len | ref   | rows | Extra |
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+
|  1 | SIMPLE      | user  | const | PRIMARY       | PRIMARY | 4       | const |    1 |       |
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+
1 row in set (0.00 sec)

可以看到,使用主键作为索引.(因为只有一个索引)
现在把name作为二级索引,并且查询列为主键列(不会进行回表操作)

ALTER TABLE `xiaolin`.`user` ADD INDEX `name_index` (`name`); 
mysql> explain select id from user where id>=1 and name='张三';
+----+-------------+-------+------+--------------------+------------+---------+-------+------+--------------------------+
| id | select_type | table | type | possible_keys      | key        | key_len | ref   | rows | Extra                    |
+----+-------------+-------+------+--------------------+------------+---------+-------+------+--------------------------+
|  1 | SIMPLE      | user  | ref  | PRIMARY,name_index | name_index | 768     | const |    1 | Using where; Using index |
+----+-------------+-------+------+--------------------+------------+---------+-------+------+--------------------------+
1 row in set, 1 warning (0.01 sec)

Using index 是使用覆盖索引(要查询的列被使用的索引覆盖)
使用全表扫描的查询

mysql> explain select * from user where age =1;
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra       |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
|  1 | SIMPLE      | user  | ALL  | NULL          | NULL | NULL    | NULL |    2 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
1 row in set (0.01 sec)
  1. 执行器的三种执行类型
    1. 主键索引查询 (因为主键唯一),执行引擎找到符合条件的第一条记录后,交给执行器,执行期判断是否否和查询条件(因为可能还有其它限制条件),如果符合,返回给客户端,接下来继续执行或终止执行
    2. 全表扫描查询
    第一条记录–>返回给执行期,符合返回客户端,不符合跳过–>第二条记录
    3. 索引下推
    第一条记录–>执行引擎判断是否符合其它条件–>符合回表,返回执行器,不符合查询下一条
    多加一个判断,减少了回表操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/167811.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【云原生】k8s 一键部署(ansible)

文章目录一、概述二、Ansible 部署1)开启记录日志2)去掉第一次连接ssh ask确认3)配置hosts三、开始编排 ansible playbook1)创建目录2)节点初始化3)安装 docker4)安装 k8s 相关组件5&#xff09…

2022 年 12 月区块链操作系统的开发回顾

正在寻找区块链操作系统组件的最新进展?你找对地方了!正如在我们的路线图文章中所描述的那样,我们一直在朝着定期且频繁的更新方向发展着,以便让我们的社区能够及时的了解到我们取得的进展,以及将区块链操作系统提升到…

新年喜报 再添殊荣 加速科技荣获浙江省“专精特新”企业认定

新年伊始,杭州市经济和信息化局公布了2022年度浙江省专精特企业名单。杭州加速科技有限公司(以下简称“加速科技”)凭借在技术创新、产品研发、精细化程度、经营能力、拓展潜力等多方面的优势,荣获浙江省“专精特新”企业荣誉称号…

一个人,一座城,你到底在乎什么?Python 爬虫告诉你!

大家好,我是安果!有时候,我们想知道生活在这座城市的人每天交流的事情,然后对数据进行一些分析,方便我们更好地了解城市的特征及居民的需求以重庆为例,最火爆的论坛是购物狂,每天都有大量的帖子…

求解带不确定事件的FJSP的多目标强化学习框架

文献:Hao Wang, Junfu Cheng, Chang Liu, Yuanyuan Zhang, Shunfang Hu, Liangyin Chen,Multi-objective reinforcement learning framework for dynamic flexible job shop scheduling problem with uncertain events,Applied Soft Computing,Volume 131,2022,1097…

超级详细的python知识点及练习题(附答案)

今天咱们继续来学习python的小知识吖,上一次木有看的同学请看:python8大核心语句 作者:阿玥的小东东 学习:python,正在学习c 主页:阿玥的小东东 目录 1.复习及易错,快来学习!&#…

基于python手撕实现BP 神经网络实现手写数字识别

本项目使用python实现全连接网络和梯度优化 方向传播并且实现了 手写数字识别项目: 神经网络 model 先介绍个三层的神经网络,如下图所示输入层(input layer)有三个 units( 为补上的 bias,通常设为

线程池ThreadPoolExecutor源码解析

参考视频 首先回顾一下创建线程等的三种方式 第一个是直接继承Thread类,重写run方法,这个其实内部也是继承了Runnable接口重写run方法。 比如: public class MyThread extends Thread{Overridepublic void run() {System.out.println("…

论文分享-《基于数据驱动多输出 ARMAX 建模的高炉十字测温中心温度》

1.简介 最近在学习研究NARMAX,故也分享下自己看的一篇论文。 2018 年 3 月 的《基于数据驱动多输出 ARMAX 建模的高炉十字测温中心温度》。主要是采用NARMAX模型进行预测,多输入多输出,有5个输出,预测中心五个点位的温度。下面讲…

计算机 - - - 局域网共享文件夹,局域网传输文件(待完善)

win10局域网共享文件夹 A电脑: 共享文件夹的电脑 B电脑: 访问共享文件夹的电脑 操作完成后, B电脑可以下载A电脑中的文件, B电脑可以修改删除, B电脑可以上传B电脑的文件到A电脑. A电脑 找到要共享的文件夹, 例如我要共享文档(E:), 我要把文档(E:)中的所有文件都让B电脑访问…

Python - 数据容器str(字符串)

目录 字符串的定义 字符串的常用操作 查找特定字符串的下标索引值 index 字符串的替换 replace 字符串的分割 split 字符串的规整操作 strip 统计字符串中某字符串的出现次数 count 统计字符串的长度 len 字符串切片 [起始下标:结束下标:步长] 字符串的定义 和其它容器…

银行案例分析:识别个人贷款客户画像,实现精准营销与风险防范

作为商业银行最主要的业务活动,也是收益最大的活动,贷款于银行的重要性不言而喻。又由于个人贷款是银行贷款不可或缺的一部分,那么了解个人贷款客户画像就有助于银行对客户进行精准销售和风险识别。 # 选手介绍 #张昊泽:亚利桑那州…

Pycharm入门搭建Django 项目

一、环境准备 1、pycharm版本 2、python版本 二、创建项目 击左上角的 File -> New Project 点击Create创建完成之后页面等待下载环境 查看Django的版本 python -m django --version 启动项目 python manage.py runserver 三、后记 在启动 Django 项目的时候我发现控制台…

【PaaS】分享一家最近发现的宝藏Paas厂家

目录 一、结识独自开 二、独自开的介绍 三、独自开的需求 四、独自开注册流程 五、神仙公司独自开 一、结识独自开 算是机缘巧合,我被C站白佬拉入了他的聊天群,群内均是来自于CSDN的不同领域的优质作者,其中不乏相关领域工作多年的老工程…

第一层:封装

文章目录前言类和对象封装class权限publicprotectedprivatestruct和class的区别封装的好处封装的用法学完封装,突破第一层🎉welcome🎉 ✒️博主介绍:一名大一的智能制造专业学生,在学习C/C的路上会越走越远&#xff0c…

【电子学会】2022年12月图形化四级 -- 金牌百分比

金牌百分比 计算金牌榜前十的国家获得的金牌总数占金牌总数的百分比。金牌榜前十的国家获得的金牌总数占金牌总数的百分比等于(金牌榜前十国家的金牌总数本届冬奥会金牌总数)100,并将这个数向下取整。 1. 准备工作 (1)保留舞台默认背景及角色小猫; (2)建立变量“金牌…

YOLOALL 一文了解YOLO各版本答案

来源:投稿 作者:ΔU 编辑:学姐 YoloAll项目简介 相信了解YOLO的小伙伴们一定都有这样的困扰,目前YOLO各个版本数量非常多,不知道在实际场景中应该选择哪个YOLO版本。甚至有时为了比较两个不同版本的YOLO的效果&#x…

python标准库xmlrpc 之RPC远程方法调用

💖💖💖养成每日阅读好习惯, 每天进步, 超越昨天的自己💖💖💖 愿景:输出体系化编程知识与技巧,助力软件行业发展与从业者学习减负,让编程产生更大价值。 🔎&am…

【linux】之网络安全

防火墙作用 在计算机领域,防火墙是用于保护信息安全的设备,其会依照用户定义的规则,允许或限制数据的传输。 用于保护内网安全的一种设备依据规则进行防护用户定义规则允许或拒绝外部用户访问防火墙分类 逻辑上划分,防火墙可以大体分为主机防火墙和网络防火墙 主机防火墙:…

服务注册与发现:Nacos Discovery

目录 一、概述 二、Nacos discovery——服务的注册与发现 1. 版本关系 2. 下载安装 (1)下载 (2)启动 (3)浏览器访问 三、Nacos服务注册与发现实战 1. 构建Spring Cloud Alibaba工程 (1&…