首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一条查询SQL在MySQL中是怎么执行的

平时我们使用的数据库,看到的通常是一个整体,比如我们执行一条查询SQL,返回一个结果集,却不知道这条语句在MySQL内部是如何执行的,接下来我们就来简单的拆解一下MySQL,看看MySQL是由哪些“零件...Server层:包含连接器、查询缓存、分析器、优化器、执行器等,涵盖了MySQL的大部分核心服务功能,以及所有的内置函数,所有的跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等, 存储引擎层...当我们全部使用长连接后,会发现有时候MySQL专用内存涨的特别快,这是因为MySQL在执行过程中临时使用的内存是管理在连接对象里面的,这些资源会在连接断开的时候才释放,所以长时间使用长连接累计下来,可能导致内存占用太大...如果查询语句在缓存中可以查到这个key,就直接把结果返回给客户端。如果语句不在缓存中,就会继续执行后边的阶段。执行完成后,将执行结果存入缓存中。...在数据库的慢查询日志中可以看到一个rows_examined的字段,表示这个语句执行过程中扫描了多少行,这个值是在执行器每次调用引擎的时候累加的,有时候执行器调用一次,在引擎内部扫描了多行,隐藏引擎扫描行数跟

4.8K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Sql语句在Mysql中的执行流程

    Server 层:主要包括连接器、查询缓存、分析器、优化器、执行器等,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图,函数等,还有一个通用的日志模块 binglog 日志模块。...连接建立后,执行查询语句的时候,会先查询缓存,MySQL 会先校验这个 sql 是否执行过,以 Key-Value 的形式缓存在内存中,Key 是查询预计,Value 是结果集。...当然在真正执行缓存查询的时候还是会校验用户的权限,是否有该表的查询条件。             ...MySQL 查询不建议使用缓存,因为查询缓存失效在实际业务场景中可能会非常频繁,假如你对一个表更新的话,这个表上的所有的查询缓存都会被清空。...对于不经常更新的数据来说,使用缓存还是可以的。             所以,一般在大多数情况下我们都是不推荐去使用查询缓存的。

    4.7K10

    MySql基础架构(sql查询语句在MySql内部具体是怎么执行的?)

    提出问题: 对于一个做后台不久的我,起初做项目只是实现了功能,所谓的增删改查,和基本查询索引的建立。直到有一个面试官问我一个问题,一条sql查询语句在mysql数据库中具体是怎么执行的?...于是开始了深入学习mysql。本篇文章通过 一条sql查询语句在mysql数据库中具体是怎么执行的? 来具体讲解mysql的基础架构。...Server层包括连接器、查询缓存、分析器、优化器、执行器等,这些涵盖了MySQL的大多数核心服务和所有的内置函数(如日期、时间、数学和加密函数等),跨存储引擎的功能都在这一层实现,比如存储过程、触发器...短连接则是指每次执行完很少的几次查询就断开连接,下次查询再重新建立一个。 建立连接的过程通常是比较复杂的,所以我建议你在使用中要尽量减少建立连接的动作,也就是尽量使用长连接。...较好的连接方式长连接产生的问题以及解决办法: 全部使用长连接后,你可能会发现,有些时候 MySQL 占用内存涨得特别快,这是因为 MySQL 在执行过程中临时使用的内存是管理在连接对象里面的。

    5.6K20

    在XCode中如何使用高级查询

    对于一个框架来说,仅有基本的CURD不行,NewLife.XCode同时还提供了一个非常宽松的方式来使用高级查询,以满足各种复杂的查询需求。...(本文同样适用于其它任何数据访问框架) 先上图看一个复杂查询的效果图: image.png 这里有8个固定的查询条件和1个模糊查询条件,加上多表关联(7张表)、分页、统计,如果用传统的做法,这个查询会非常的复杂...XCode不支持多表关联(v7开始测底不支持,以前的支持太鸡肋,几乎从未使用),这种涉及多表关联的查询,就需要子查询来代替了,看看SearchWhere: image.png image.png 可以看到...在各个小片段上使用MakeCondition格式化数据,保证这些代码能根据当前数据库生成相应的语句,使得系统能支持多数据库。比如时间日期类型,在MSSQL是单引号边界,在Access是井号边界。...NewLife.XCode下载地址:http://XCode.codeplex.com 没有很完整的教程,只有本博客中的点点滴滴!

    5K60

    python-Python与MySQL数据库-使用Python执行MySQL查询

    执行MySQL查询一旦我们成功连接到MySQL数据库,就可以执行MySQL查询。MySQL查询是使用SQL语言编写的,并且可以使用Python库来执行。...然后,我们定义了MySQL查询语句,并使用cnx.cursor()方法创建一个游标对象。接下来,我们使用游标的execute()方法执行查询,将结果存储在cursor变量中。...最后,我们遍历游标中的每一行,并使用print()函数输出每一行的结果。示例下面我们将使用一个示例来演示如何使用Python执行MySQL查询。...然后,我们定义了MySQL查询语句,并使用cnx.cursor()方法创建一个游标对象。接下来,我们使用游标的execute()方法执行查询,将结果存储在cursor变量中。...最后,我们遍历游标中的每一行,并使用print()函数输出每一行的结果。如果您希望使用其他类型的查询,例如插入、更新或删除数据,可以使用类似的方法执行查询。

    1.3K20

    SQL语句在MySQL中是如何执行的

    修改完成后,只有再重新建立的连接才会使用到新的权限设置。 建立连接的过程通常是比较复杂的,所以我建议你在使用中要尽量减少建立连接的动作,也就是尽量使用长连接。...如果缓存 key 被命中,就会直接返回给客户端,如果没有命中,就会执行后续的操作,完成后也会把结果缓存起来,方便下一次调用。当然在真正执行缓存查询的时候还是会校验用户的权限,是否有该表的查询条件。...Mysql 查询不建议使用缓存,因为对于经常更新的数据来说,缓存的有效时间太短了,往往带来的效果并不好,对于不经常更新的数据来说,使用缓存还是可以的,Mysql 8.0 版本后删除了缓存的功能,官方也是认为该功能在实际的应用场景比较少...优化器 经过了分析器分析,MySQL 知道你要干啥了,在开始执行之前,还要先经过优化器的处理。...InnoDB 引擎把数据保存在内存中,同时记录 redo log,此时 redo log 进入 prepare 状态,然后告诉执行器,执行完成了,随时可以提交。

    4.4K20

    使用ADO和SQL在Excel工作表中执行查询操作

    学习Excel技术,关注微信公众号: excelperfect 我们可以将存储数据的工作表当作数据库,使用ADO技术,结合SQL查询语句,可以在工作表中获取满足指定条件的数据。...在VBE中,单击菜单“工具——引用”,在“引用”对话框中,找到并选取“Microsoft ActiveX Data Objects 6.1 Library”,如下图1所示。 ?...Source=" &ThisWorkbook.FullName & ";" & _ "ExtendedProperties=""Excel 12.0;HDR=Yes;"";" '在字符串中存储查询语句...在同一代码中,只需要连接数据库一次,接着可以执行多个查询操作,无需每次查询前都进行连接。...SQL查询语句为: query = "Select * from [" & wksData.Name _ & "$] Where 物品='苹果' " 在工作表wksData中查询物品为“苹果”的记录

    4.7K20

    MYSQL 8 VS MYSQL 5.7 在复杂查询中 到底好了多少

    MySQL 8 最终是要大面积替换MYSQL5.7 , 之前的文字可能给人感觉MYSQL 8 还不如 MYSQL 5.7 ,实际上不然,任何东西新的一定有问题,解决解决就好了,在复杂查询这块 MYSQL...下面是MYSQL 8 和 MYSQL 5.7 在一个稍微复杂查询的执行计划 对比上面的图,一样的语句,一样的数据库,一样的表,一样的数据行数和内容,mysql 8 由于各种优化,去掉了 using firesort...filesort mysql 8.018 mysql 5.7.23 通过这两个例子可以看到,在使用GROUP BY 这样的语句,在没有特殊优化的情况下,,MYSQL 8 不在使用 FILESORT...的新功能对大部分查询语句是有帮助的,但实际上在测试中有些简单的语句,MYSQL 8 并不能占据什么便宜,或者说还可能会比MYSQL 5.7 慢了“一眨眼” 的功夫。...最后总结一下, 如果当前MYSQL 5.X 中运行的系统逻辑并不复杂,执行的语句都是简单的,那换了MYSQL 8 可能并不能得到什么好处,甚至会“挨骂”。

    2.7K30

    基于时间的盲注

    01 盲注简介 盲注就是在sql注入过程中,sql语句执行的选择后,选择的数据不能回显到前端页面。此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。...(注意):sleep 函数是只要存在一个满足条件的行就会延迟指定的时间,比如sleep(5),但是实际上查找到两个满足条件的行,那么就会延迟10s,这其实是一个非常重要的信息,在真实的渗透测试过程中,我们有时候不清楚整个表的情况的话...图片 06 绕过方法 当sleep函数和benchmark函数被屏蔽时我们可以使用以下两种方法绕过限制策略。...因此,只有那些在php中使用mysql_pconnect()方法链接数据库的网站,才有可能使用这种方法。...但是,在必须使用大量查询或 CPU密集型函数(如MySQL的BENCHMARK())的情况下,系统管理员可能会意识到正在发生的事情。 另一件需要考虑的事情是你注入的延迟时间。

    75910
    领券