问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

sql语句的执行流程是什么?

发布网友 发布时间:2022-05-03 05:20

我来回答

1个回答

懂视网 时间:2022-05-03 09:41

SQL 语句在 MySQL 的各个功能模块中的执行过程。

大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。

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

存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB,它从 MySQL 5.5.5 版本开始成为了默认存储引擎。也就是说,你执行 create table 建表的时候,如果不指定引擎类型,默认使用的就是 InnoDB。不过,你也可以通过指定存储引擎的类型来选择别的引擎,比如在 create table 语句中使用 engine=memory, 来指定使用内存引擎创建表。不同存储引擎的表数据存取方式不同,支持的功能也不同,在后面的文章中,我们会讨论到引擎的选择。从图中不难看出,不同的存储引擎共用一个 Server 层,也就是从连接器到执行器的部分。你可以先对每个组件的名字有个印象,接下来我会结合开头提到的那条 SQL 语句,带你走一遍整个执行流程,依次看下每个组件的作用。

连接器第一步,你会先连接到这个数据库上,这时候接待你的就是连接器。连接器负责跟客户端建立连接、获取权限、维持和管理连接。连接命令一般是这么写的:

mysql -h$ip -P$port -u$user -p
  • 连接命令中的 mysql 是客户端工具,用来跟服务端建立连接。在完成经典的 TCP 握手后,连接器就要开始认证你的身份,这个时候用的就是你输入的用户名和密码。如果用户名或密码不对,你就会收到一个"Access denied for user"的错误,然后客户端程序结束执行。
  • 如果用户名密码认证通过,连接器会到权限表里面查出你拥有的权限。之后,这个连接里面的权限判断逻辑,都将依赖于此时读到的权限。这就意味着,一个用户成功建立连接后,即使你用管理员账号对这个用户的权限做了修改,也不会影响已经存在连接的权限。修改完成后,只有再新建的连接才会使用新的权限设置。

  • 连接完成后,如果你没有后续的动作,这个连接就处于空闲状态,你可以在 show processlist 命令中看到它。文本中这个图是 show processlist 的结果,其中的 Command 列显示为“Sleep”的这一行,就表示现在系统里面有一个空闲连接。
    客户端如果太长时间没动静,连接器就会自动将它断开。这个时间是由参数 wait_timeout 控制的,默认值是 8 小时。


    如果在连接被断开之后,客户端再次发送请求的话,就会收到一个错误提醒: Lost connection to MySQL server during query。这时候如果你要继续,就需要重连,然后再执行请求了。数据库里面,长连接是指连接成功后,如果客户端持续有请求,则一直使用同一个连接。短连接则是指每次执行完很少的几次查询就断开连接,下次查询再重新建立一个。建立连接的过程通常是比较复杂的,所以我建议你在使用中要尽量减少建立连接的动作,也就是尽量使用长连接。

    但是全部使用长连接后,你可能会发现,有些时候 MySQL 占用内存涨得特别快,这是因为 MySQL 在执行过程中临时使用的内存是管理在连接对象里面的。这些资源会在连接断开的时候才释放。所以如果长连接累积下来,可能导致内存占用太大,被系统强行杀掉(OOM),从现象看就是 MySQL 异常重启了。怎么解决这个问题呢?你可以考虑以下两种方案。

    1. 定期断开长连接。使用一段时间,或者程序里面判断执行过一个占用内存的大查询后,断开连接,之后要查询再重连。
    2. 如果你用的是 MySQL 5.7 或更新版本,可以在每次执行一个比较大的操作后,通过执行 mysql_reset_connection 来重新初始化连接资源。这个过程不需要重连和重新做权限验证,但是会将连接恢复到刚刚创建完时的状态。


    查询缓存



    连接建立完成后,你就可以执行 select 语句了。执行逻辑就会来到第二步:查询缓存。MySQL 拿到一个查询请求后,会先到查询缓存看看,之前是不是执行过这条语句。之前执行过的语句及其结果可能会以 key-value 对的形式,被直接缓存在内存中。key 是查询的语句,value 是查询的结果。如果你的查询能够直接在这个缓存中找到 key,那么这个 value 就会被直接返回给客户端。如果语句不在查询缓存中,就会继续后面的执行阶段。执行完成后,执行结果会被存入查询缓存中。你可以看到,如果查询命中缓存,MySQL 不需要执行后面的复杂操作,就可以直接返回结果,这个效率会很高。但是大多数情况下我会建议你不要使用查询缓存,为什么呢?因为查询缓存往往弊大于利。查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。因此很可能你费劲地把结果存起来,还没使用呢,就被一个更新全清空了。对于更新压力大的数据库来说,查询缓存的命中率会非常低。除非你的业务就是有一张静态表,很长时间才会更新一次。比如,一个系统配置表,那这张表上的查询才适合使用查询缓存。好在 MySQL 也提供了这种“按需使用”的方式。你可以将参数 query_cache_type 设置成 DEMAND,这样对于默认的 SQL 语句都不使用查询缓存。而对于你确定要使用查询缓存的语句,可以用 SQL_CACHE 显式指定,像下面这个语句一样:mysql> select SQL_CACHE * from T where ID=10;需要注意的是,MySQL 8.0 版本直接将查询缓存的整块功能删掉了,也就是说 8.0 开始彻底没有这个功能了。

    分析器



    如果没有命中查询缓存,就要开始真正执行语句了。首先,MySQL 需要知道你要做什么,因此需要对 SQL 语句做解析。

    优化器



    经过了分析器,MySQL 就知道你要做什么了。在开始执行之前,还要先经过优化器的处理。优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。

    执行器



    MySQL 通过分析器知道了你要做什么,通过优化器知道了该怎么做,于是就进入了执行器阶段,开始执行语句。开始执行的时候,要先判断一下你对这个表 T 有没有执行查询的权限,如果没有,就会返回没有权限的错误,如下所示 (在工程实现上,如果命中查询缓存,会在查询缓存返回结果的时候,做权限验证。查询也会在优化器之前调用 precheck 验证权限)。


    from:丁奇mysql

    01基础架构,一条SQL查询语句是如何执行的?

    标签:cti   str   有一个   建立   复杂   做什么   tps   结束   类型   

    SQL语句执行流程与顺序原理解析

    SQL语句执行流程与顺序原理解析Oracle语句执行流程第一步:客户端把语句发给服务器端执行当我们在客户端执行SQL语句时,客户端会把这条SQL... SQL语句执行流程与顺序原理解析Oracle语句执行流程第一步:客户端把语句发给服务器端执行当我们在客户端执行SQL语句时,客户端会把这条SQL 展开  我来答 1个回答 #热议# ...

    数据库SQL执行流程和索引添加

    数据库执行流程包括客户端发送SQL语句至MySQL服务器,然后经过查询缓存(仅对SELECT语句有效)、解析处理优化、执行器调用存储引擎API进行查询,最后将结果返回给客户端。此外,对于UPDATE、DELETE和INSERT语句,数据库还需要执行redo log、binlog以及redo log commit三个流程以确保数据的一致性和完整性。数据库...

    sql语句的执行流程是什么?

    MySQL—一条查询SQL语句的完整执行流程

    MySQL查询执行流程详解:首先,当接收到SQL请求时,MySQL从连接层面开始操作:连接数据库: 客户端尝试与数据库建立连接,由连接器处理。若长时间无操作,连接可能会因wait_timeout参数设置(默认8小时)而自动断开。"Sleep"状态的连接表示空闲。查询缓存: 如果有缓存功能,MySQL会检查是否之前执行过相同的语句。

    MyBatis源码之MyBatis中SQL语句执行过程

    MyBatis源码之MyBatis中SQL语句执行过程 MyBatis编程时主要有两种方式执行SQL语句。方式一,通过SqlSession接口的selectList方法调用,进入DefaultSqlSession的实现,最终调用executor的query方法,使用MappedStatement封装SQL语句。方式二,调用SqlSession接口的getMapper(Class type)方法,通过工厂创建接口的代理对象,...

    MySQL中执行SQL的流程

    存储引擎作为核心组件,根据执行器调用的执行计划,执行具体的数据库操作,如读取内存缓存或磁盘数据,更新数据等。MySQL支持多种存储引擎,如InnoDB,执行器根据优化器生成的执行计划调用存储引擎接口来完成SQL语句的执行。总的来说,MySQL执行SQL的流程如下:接收网络请求,解析SQL,优化查询,由存储引擎执行...

    hive sql执行顺序与mysql执行顺序

    Reduce阶段:首先进行group by操作,分组方式通常是hash。随后执行select操作,去除冗余字段。接着应用having过滤,最后执行limit限制输出行数。总结,Hive SQL执行流程更侧重数据过滤和分组,而MySQL则更多关注表关联和条件应用顺序。在实际操作中,理解并掌握这两者的执行顺序有助于优化查询性能。执行计划分析能...

    描述将sql语句提交给mysql数据库以后数据库拿到sql语句后执行流程

    SQL语句在提交服务器后的流程如下:1 进行词法分析 2进行语法分析,验证其中的属性、字段等在元数据中是否存在,并生成语法解析树 3 将语法解析树转换成逻辑执行计划 4对逻辑执行计划进行优化,得到优化后的逻辑执行计划 5根据优化后的逻辑执行计划,以及数据库中的索引等优化信息,为其中的关系代数操作符...

    MySQL学习01——一条SQL语句的执行

    学习MySQL时,需理解SQL语句执行流程,以select语句为例,解析MySQL内部架构。MySQL分为Server层与存储引擎层。连接器负责建立客户端与数据库连接,获取权限,管理连接,认证过程包括用户名、密码和权限查询。建立连接需在交互对话框中输入密码,建立成功后,客户端请求使用同一连接,连接器主动断开长连接后,需...

    mybatis源码分析02:执行sql语句

    本文是mybatis源码分析的第三篇,我们来分析sql语句的执行流程。 在准备mybatis示例demo一文中,我们提供的测试主类如下:publicclassTest01{publicstaticvoidmain(String[]args)throwsException{//配置文件路径Stringresource="org/apache/ibatis/demo/mybatis-config.xml";InputStreaminputStream=Resources.getResourceAsStream...

    声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
    E-MAIL:11247931@qq.com
    郑州市金水区丰庆路办事处魅力丰庆 金龙社区居委会河南省郑州市金水区丰产路街道金龙社区居委 批发和零售业商品销售和库存报表批发和零售业商品销售和库存怎么填 vb 入库单制作 甲减是哪个指标不正常 甲减如何确诊 ...草案拟规定点餐浪费也要收钱,平常你都是怎么避免浪费的呢?_百度知 ... 金牌励志系列·名著的力量:向文学大师学英语目录 由于雨季造成商场消售不好,怎样写报表? ...的自营销售与专柜销售收入支出等用什么科目区分?利润表又如何做? 如果要成人高考,应该看些什么书呢? 苹果手机删除了通讯录怎样恢复 成人高考参考书 ...的聊天记录 怎么才能恢复已经删除的微信聊天记录? 我男朋友喜欢什么类型的? 为什么男朋友喜欢? 男友喜欢一个女人的表现 男朋友喜欢什么礼物 二郎神是谁和谁的儿子呀? 杨戬的儿子是谁 什么是猫狗股 月线分析汤姆猫股?汤姆猫 股票股吧?诊股 汤姆猫? 汤姆猫有投资价值吗?300459汤姆猫股票?汤姆猫股票发行价格? 汤姆猫股票现在可以买入吗?汤姆猫现价是多少钱?汤姆猫股票最新消息? 杨戬的孩子是谁 股票汤姆猫是什么股票?汤姆猫利润增长股价跌?汤姆猫 股吧? 汤姆猫股票现在适合长期持有吗?汤姆猫汤姆猫股票?汤姆猫股票刚发行多少价位? 汤姆猫股票怎么样?300459汤姆猫?汤姆猫股票发行价多少钱? 留学生国外学历认证流程? 二郎神谁的儿子 亲们 谁能告诉我PS是自学还是去培训班学比较好呢 《国家电网基建(2010)173号文〈国家电网公司输变电工程结算管理办法〉谁有啊,谢谢了 ps自学还是上培训班 建设工程价款结算暂行办法的结算规定 想学PS,是自学效果比较好些,还是报个培训班呢? 学PS.是买书自学好还是上培训班好? 工程竣工结算的法律规定 PS是自学合适还是去报名培训班 如何提高工程结算的进度管理办法 工程预结算管理办法74044 跪求一个工程结算的管理制度? 工程结算管理办法(1) 工程结算法律效力的规定 如何做好建设工程的结算工作 施工企业怎样加强工程竣工结算管理 工程结算需要什么资料 工程结算方案是二审吗 交换机端口描述中TX,FX,LX,T等分别代表什么意思? 交换机和路由器端口描述问题 思科交换机如何给每个端口做个描述
    • 焦点

    最新推荐

    猜你喜欢

    热门推荐