首页 > 数据库 >mysql中一条sql语句是如何执行的

mysql中一条sql语句是如何执行的

时间:2022-11-21 13:03:57浏览次数:70  
标签:语句 缓存 mysql 查询 sql 执行 优化 连接


架构

mysql是一种单进程多线程的架构,mysql server层的核心组件:连接器、查询缓存、分析器、优化器、执行器

 

一条sql语句是如何执行的

 

  1. 客户端发送一条查询给服务器
  2. 服务器先检查查询缓存,如果命中缓存,则返回缓存结果
  3. 服务器进行sql解析、预处理、再有优化器生成对应的执行计划
  4. mysql根据优化器生成的执行计划,调用存储引擎的API来执行查询
  5. 返回结果

 

连接器

 

作用:建立连接、权限验证

 

连接完成后,如果我们没有后续动作,则连接处于空闲状态  show processlist  其中的Command列显示为sleep的这几行,表示系统有几个空闲连接

 

常见错误:

Lost connection to MySql server during query

 

客户端如果长时间没有动静,连接器就会将它断开,这个时间是由 wait_timeout控制的,默认8小时,需要重连。

 

尽量减少建立连接的动作,也就是尽量使用长连接

 

长连接,占用内存飙升?

 

  1. 定期断开长连接
  2. mysql5.7 提供了mysql_reset_connection 参数重新初始化资源

 

查询缓存

 

  1. 请求在任何字符上的不同(空格、注释)都是不同的缓存
  2. 包含系统函数、用户自定义变量和函数、一些系统表都不会缓存
     
     

 

从mysql5.7.20开始不建议使用查询缓存,mysql8.0中删除

更详细的介绍参考:​​https://www.phpmianshi.com/?id=156​

 

分析器

 

sql语句 => 解析 => 解析树 => 预处理器(表、列是否存在,名字别名是否有歧义等)

 

词法分析:select识别出查询语句

语法分析:是否有语法错误

 

优化器

 

优化器的目的:

  1. 将解析树转化为执行计划
  2. 找到最好的执行计划

 

衡量方法:

  1. 基于成本的查询优化(Cost-Based Optimizer CBO)
  2. 尝试预测一个查询使用某种执行计划时的成本,并选择其中成本最小的一个

 

依赖:

  1. 根据优化规则对关系表达式进行转换(多执行计划)
  2. 统计信息和代价模型(成本计算)

 

执行引擎

查询权限判断

  1. 如果命中查询缓存,会在查询缓存返回结果的时候,做权限验证
  2. 查询也会在优化器之前调用precheck权限验证
  3. 执行器判断一下我们对这个表T有没有执行查询的权限

 

 

 

 

标签:语句,缓存,mysql,查询,sql,执行,优化,连接
From: https://blog.51cto.com/u_6353447/5873547

相关文章

  • mysql中长事务详解
    什么是长事务运行时间比较长,长时间未提交的事务,也可以称之为大事务。这类事务往往会造成大量的阻塞和锁超时,容易造成主从延迟,要尽量避免使用长事务。下面我将演示下如何开启......
  • mysql中行锁、两阶段锁协议、死锁以及死锁检测
    行锁MySQL的行锁都是在引擎层实现的,但是MyISAM不支持行锁,意味着并发控制只能使用表锁,同一张表任何时刻只能被一个更新在执行,影响到业务并发度。InnoDB是支持行锁的,这也是......
  • SQL多表连接查询(详细实例)
    SQL多表连接查询(详细实例)本文主要列举两张和三张表来讲述多表连接查询。新建两张表:表1:student 截图如下:表2:course 截图如下:(此时这样建表只是为了演示连接SQL语句,当然实......
  • MySQL45讲笔记
    MySQL45https://funnylog.gitee.io/mysql45/原系列目录:01讲基础架构:一条SQL查询语句是如何执行的主要介绍MySQL分为Server层和存储引擎层两部分:Server层包括连接......
  • sql dvwa注入笔记
    union注入1、判断是否可以注入:单引号测试and测试由上判断可以得知存在SQL注入2、猜解字段长度orderby2orderby3可以猜到字段长度为23、爆数据库名、数据库版本......
  • SQL Server 还原数据库
    1、备份要还原的数据库   选择要备份的数据库,右键单击,任务——备份。2、备份完成后,将数据库还原3、新建一个空的数据库,比如Gsy_TestNew,将备份的数据库还原到这个......
  • 5分钟搞定 SQL Server 到 MySQL 数据迁移和同步
    简述SQLServer是一个值得信赖的老牌数据库系统,自从1988年由Microsoft、Sybase和Ashton-Tate三家公司共同推出之后就一直不断迭代更新。而如今我们提到SQLServer......
  • mysql hint介绍
    在mysql中,hint指的是“查询优化提示”,会提示优化器按照一定的方式来生成执行计划进行优化,让用户的sql语句更具灵活性;Hint可基于表的连接顺序、方法、访问路径、并行度......
  • mysql优化
    思路:1、尝试单表查询,验证索引是否正常试了一下单表查询B是可以走主键索引,正常,排出索引问题2、尝试优化SQL修改了一下SQL,将leftjoin分别改为innerjoin,join和子查询,几......
  • MySQL联结表
    简介保存数据时往往不会将所有数据保存在一个表中,而是在多个表中存储。联结表就是从多个表查询数据,其实就是多表操作。联结(JOIN)是一种机制,用来在一条SELECT语句中关......