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

一条SQL语句在MySQL中如何执行的

来源:JavaGuide | 作者:木木匠 本篇文章会分析一个 sql 语句在 MySQL 中的执行流程,包括 sql 的查询在 MySQL 内部会怎么流转,sql 语句的更新是怎么完成的。...•执行器: 执行语句,然后从存储引擎返回数据。 ?...MySQL 查询不建议使用缓存,因为查询缓存失效在实际业务场景中可能会非常频繁,假如你对一个表更新的话,这个表上的所有的查询缓存都会被清空。对于不经常更新的数据来说,使用缓存还是可以的。...: 先检查该语句是否有权限,如果没有权限,直接返回错误信息,如果有权限,在 MySQL8.0 版本以前,会先查询缓存,以这条 sql 语句为 key 在内存中查询是否有结果,如果有直接缓存,如果没有,执行下一步...进行权限校验,如果没有权限就会返回错误信息,如果有权限就会调用数据库引擎接口,返回引擎的执行结果。 2.2 更新语句 以上就是一条查询 sql 的执行流程,那么接下来我们看看一条更新语句如何执行的呢?

3.5K20

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

来源:http://t.cn/E6U9Z9T ---- 概览 本篇文章会分析下一个sql语句在mysql中的执行流程,包括sql的查询在mysql内部会怎么流转,sql语句的更新是怎么完成的。...如果缓存key被命中,就会直接返回给客户端,如果没有命中,就会执行后续的操作,完成后也会把结果缓存起来,方便下一次调用。当然在真正执行缓存查询的时候还是会校验用户的权限,是否有该表的查询条件。...: 先检查该语句是否有权限,如果没有权限,直接返回错误信息,如果有权限,在mysql8.0版本以前,会先查询缓存,以这条sql语句为key在内存中查询是否有结果,如果有直接缓存,如果没有,执行下一步。...进行权限校验,如果没有权限就会返回错误信息,如果有权限就会调用数据库引擎接口,返回引擎的执行结果。 2.2 更新语句 以上就是一条查询sql的执行流程,那么接下来我们看看一条更新语句如何执行的呢?...然后拿到查询的语句,把 age 改为19,然后调用引擎API接口,写入这一行数据,InnoDB引擎把数据保存在内存中,同时记录redo log,此时redo log进入prepare状态,然后告诉执行器

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

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

    平时我们使用的数据库,看到的通常是一个整体,比如我们执行一条查询SQL,返回一个结果集,却不知道这条语句在MySQL内部是如何执行的,接下来我们就来简单的拆解一下MySQL,看看MySQL是由哪些“零件...这样在我们以后遇到MySQL的一些异常或者问题的时候,就可以快速定位问题并解决问题。 下边通过一张图来看一下SQL的执行流程,从中可以清楚的看到SQL语句在MySQL的各个功能模块中执行的过程。 ?...当我们全部使用长连接后,会发现有时候MySQL专用内存涨的特别快,这是因为MySQL在执行过程中临时使用的内存是管理在连接对象里面的,这些资源会在连接断开的时候才释放,所以长时间使用长连接累计下来,可能导致内存占用太大...如果查询语句在缓存中可以查到这个key,就直接把结果返回给客户端。如果语句不在缓存中,就会继续执行后边的阶段。执行完成后,将执行结果存入缓存中。...对于有索引的表,执行的逻辑大同小异,第一次调用的是“取满足条件的第一行”这个接口,然后循环取“满足条件的下一行”这个接口,这些接口都是引擎中定义好的。

    4.8K20

    详细描述一条 SQL 语句在 MySQL 中的执行过程

    在 MySQL 中,一条 SQL 语句的执行过程可以分为多个阶段。每个阶段都有特定的任务,确保 SQL 语句能够正确、高效地执行。以下是详细的执行过程:1....执行阶段(Execution)执行计划:MySQL 根据生成的执行计划,逐条执行各个操作。数据读取:MySQL 从存储引擎(如 InnoDB)中读取数据。...数据处理:MySQL 对读取的数据进行过滤、排序、分组等操作。结果集生成:MySQL 生成最终的结果集。7. 返回结果(Result Return)结果集返回:MySQL 将生成的结果集返回给客户端。...示例假设有一条简单的 SQL 语句:SELECT name, age FROM employees WHERE age > 30;连接阶段客户端连接到 MySQL 服务器并进行身份验证。...过滤出 age > 30 的记录。选择 name 和 age 列,生成结果集。返回结果将结果集返回给客户端。日志记录记录查询日志和相关日志。

    8810

    【MySQL】执行计划 explain 及 一条select语句在MySQL中的奇幻之旅

    文章目录 示例 解释 一条select语句在MySQL中的奇幻之旅 示例 explain select * from emp; 解释 列(Column) 含义(Meaning) id The SELECT...to be examined (要得到最终记录索要扫描经过的记录数) filtered Percentage of rows filtered by table condition(存储引擎返回的数据在...语句为value IN (SELECT primary_key FROM single_table WHERE some_expr) index_subquery:子查询中的返回结果字段组合是一个索引(...key:上面写着 rows:这是mysql估算的需要扫描的行数(不是精确值)。这个值非常直观显示 SQL 的效率好坏, 原则上 rows 越少越好。 extra:在大多数情况下会出现以下几种情况。...:对数据使用一个外部的索引排序 Using index condition:使用了索引下推 一条select语句在MySQL中的奇幻之旅 注:MySQL8.0起以取消图中第九步(查询缓存)原因:把查询语句作为

    1.2K20

    一条更新SQL在MySQL数据库中是如何执行的

    点击关注"故里学Java" 右上角"设为星标"好文章不错过 前边的在《一条SQL查询在MySQL中是怎么执行的》中我们已经介绍了执行过程中涉及的处理模块,包括连接器、分析器、优化器、执行器、存储引擎等。...今天我们来一起看看一条更新语句又是怎么一个执行流程。 查询语句的一套执行流程,更新语句也会同样的走一步,下边我们在对照上次文章中的图来简单的看一下: ?...接下来,分析器会经过语法分析和词法分析,知道了这是一条更新语句后,优化器决定要使用哪一个索引,然后执行器负责具体的执行,先找到这一行,然后做更新。...我们先创建一张表,这个表有主键ID和一个整型字段c: mysql> create table demo T (ID int primarty ,c int); 然后将ID=2的这一行的值加1 mysql...假设redolog写完,binlog还没写完,MySQL进程异常重启了。我们知道,redolog写完以后,系统即使崩溃了,也可以将数据恢复,所以在MySQL重启后,这一行会被恢复成1。

    3.8K30

    【Android 返回堆栈管理】打印 Android 中当前运行的 Activity 任务栈信息 | Activity 任务栈信息分析 | Activity 在相同 Stack 中的不同 Task

    文章目录 一、打印 Android 中当前运行的 Activity 任务栈信息 二、Activity 任务栈信息分析 三、Activity 在相同 Stack 的不同 Task 情况 一、打印 Android...中当前运行的 Activity 任务栈信息 ---- 使用如下命令 , 打印 Android 手机中的 Activity 栈 : adb shell dumpsys activity activities...; 三、Activity 在相同 Stack 的不同 Task 情况 ---- 默认状态下 , 同一个应用启动的两个 Activity 都在相同 Stack 的相同 Task 中 , 但是如下情况会出现...Activity 在相同 Stack 的不同 Task 中 ; 参考 【Android 应用开发】Activity 任务亲和性 taskAffinity 设置 ( taskAffinity 属性 )...singleTask 启动模式 , 则新启动的 Activity 放在另一个 Task 中 ; 注意 : 两个 Activity 虽然在不同的 Task 任务中 , 但还是在相同的 Stack 栈中

    5.9K10

    写代码有这些想法,同事才不会认为你是复制粘贴程序员!

    关键业务代码无论身处何地,都应该有足够的日志保驾护航。 比如:你实现转账业务,转个几百万,然后转失败了,接着客户投诉,然后你还没有打印到日志,想想那种水深火热的困境下,你却毫无办法。。。...有兴趣的朋友可以看一下我这篇文章。后端程序员必备:索引失效的十大杂症 十一、你的方法到底应该返回空集合还是 null呢? 如果返回null,调用方在忘记检测的时候,可能会抛出空指针异常。...返回一个空集合呢,就省去该问题了。 mybatis查询的时候,如果返回一个集合,结果为空时也会返回一个空集合,而不是null。...用户在APP上连续点击了多次提交订单,总不能生成多个订单吧 用户因为网络卡了,连续点击发送消息,接受者总不能收到重复的同一条消息吧。...,获取到各中数据,然后再根据这些数据进行各种排序等等操作,这一系列猛如虎的操作下来,接口性能肯定不好。

    36120

    springboot第30集:springboot集合问题

    基本概念 Index: 一系列文档的集合,类似于mysql中数据库的概念 Type: 在Index里面可以定义不同的type,type的概念类似于mysql中表的概念,是一系列具有相同特征数据的结合。...Document: 文档的概念类似于mysql中的一条存储记录,并且为json格式,在Index下的不同type下,可以有许多document。...查询当前es集群的相关消息,包括集群中的index数量、运行状态、当前集群所在的ip,目的在于将查询的结果以更加友好的方式输出。...image.png 如果你希望在Spring Boot中,当数据库中没有对应值时,仍然返回字段但其值为空,你可以使用Jackson库的另一个配置选项。...使用上述配置后,当属性的值为null时,它将被序列化为一个空字符串。如果属性的值为空字符串或空集合,则不会返回该属性。

    37620

    python 的几种数据类型

    但 该返回值与最初的 a_list 变量并不一样。它是一个新列表,只 不过恰好拥有完全相同的元素而已。a_list[:] 是对列表进行复 制的一条捷径。...要创建空集合,可不带参数调用 set() 。 2. 打印出来的空集合表现形式看起来有点儿怪。也许,您期望 看到一个 {} 吧 ?该符号表示一个空的字典,而不是一个空的集 合。...要检测某值是否是集合的成员,可使用 in 运算符。其工作原 理和列表的一样。 2. union() 方法返回一个新集合,其中装着 在两个 集合中出现 的元素。...difference() 方法返回的新集合中,装着所有在 a_set 出现 但未在 b_set 中的元素。 5....在布尔类型上下文环境中,空集合为假值。 2. 任何至少包含一个上元素的集合为真值。 3. 任何至少包含一个上元素的集合为真值。元素的值无关紧 要。

    1.6K20

    Mybatis查询结果为空时,为什么返回值为NULL或空集合?

    JDBC 中的 ResultSet 简介 你如果有 JDBC 编程经验的话,应该知道在数据库中执行一条 Select 语句通常只能拿到一个 ResultSet,而结果集 ResultSet 是数据中查询结果返回的一种对象...如果一条SQL语句能够产生多个ResultSet, // 那么在编写Mapper.xml映射文件的时候,我们可以在SQL标签的resultMap属性中配置多个 // 在简单映射流程中,会先通过 shouldApplyAutomaticMappings() 方法检测是否开启了自动映射。...));中获得的 list 就是默认创建的空集合。...所以不管是集合类型还是普通对象,Mybatis 都会先初始化一个 List 存储结果,然后返回值为普通对象且查为空的时候,selectOne 会判断然后直接返回 NULL 值。

    5.4K20

    关于 MyBatis-Plus 分页查询的探讨 → count 都为 0 了,为什么还要查询记录?

    查询到数据的分页   我们先来看如下案例   初始数据有 2 条,我们来看看此案例的 SQL 输出   一共两条 SQL   一条查询总数   一条查询分页记录   没毛病,稳如老狗...我们接着看另一个案例   初始的 2 条数据中没有 name = '吴用' 的记录,那么此时的 SQL 输出是怎么样的了?   ...同样输出两条 SQL   一条查询总数   一条查询记录 这有没有问题?大家想清楚再回答!   ...关键代码   问题就出在   既然 总记录条数 都 返回 null 或者 空集合 ?   ...  修复日期: 2019/4/14 ,而版本 3.1.1 的发布日期: 2019/4/26 ,也就是说这个问题在 3.1.1 中已经修复了,我们来验证下   至此这个问题的来龙去脉,相信大家已经清楚了

    1.3K20

    极致用户体验:论批量处理接口的性能优化之道

    背景 同批量导入一样,在我们的系统中,存在着大量的批量处理的接口,比如批量获取运单,批量出库,批量打印,等等,像这样的接口大概有10几个。...这里的通知可以走消息模块,同时,上面的完成小请求的改造后就可以返回前端了,等到这里全部完成再异步通知。 好了,我们直接来看我的架构设计图: ?...xxx处理中,并记录原来的状态,这里使用mysql的批量更新,速度很快 把大批量的数据一条一条的发到Kafka中,Kafka承担了分发器的作用 给前端返回响应,说明本次请求收到了,并且在处理中了,这样界面上查询的结果就是这些单据正在...xxx处理中 多个服务实例从Kafka拉取消息来消费 针对每一条数据进行处理,比如检查权限、参数,处理复杂的业务逻辑,等等,并写入mysql处理的结果 记录每一条数据的处理结果到redis中,比如成功条数...+1,失败条数+1,等等 当检测到所有数据都处理完了,即总共条数=成功条数+失败条数,就发个消息到消息服务 消息服务发送一个新的通知给前端:您刚才进行的XXX操作已完成,成功X条,失败X条 前端收到这个通知后

    1.4K10

    java集合框架-LinkedHashSet(二)

    除了基本的添加、删除、查找等操作,LinkedHashSet还提供了一些其他的常用方法,包括:clear():清空集合中的所有元素。...contains(Object obj):判断集合中是否包含指定的元素,返回true或false。isEmpty():判断集合是否为空,返回true或false。size():获取集合中元素的个数。...toArray():将集合中的元素复制到一个数组中并返回。toString():将集合转换为字符串形式并返回。...注意,添加的顺序是按照添加的顺序进行的,而不是按照字母顺序或其他排序规则。接下来,我们使用contains()方法判断"apple"是否在集合中,并使用size()方法获取集合中元素的个数。...然后,我们使用remove()方法删除"banana"元素,并使用toArray()方法将集合转换为数组,并使用clear()方法清空集合。

    13010

    面试:什么是死锁,如何避免或解决死锁;MySQL中的死锁现象,MySQL死锁如何解决

    在InnoDB中,如果一条SQL语句能命中索引执行,那就会加行锁,但如果无法命中索引加的就是表锁。...一般只有两种方案:锁超时机制:事务/线程在等待锁时,超出一定时间后自动放弃等待并返回。外力介入打破僵局:第三者介入,将死锁情况中的某个事务/线程强制结束,让其他事务继续执行。...4.2.1 MySQL的锁超时机制在InnoDB中其实提供了锁的超时机制,也就是一个事务在长时间内无法获取到锁时,就会主动放弃等待,抛出相关的错误码及信息,然后返回给客户端。...50s,也就是在50s内未获取到锁的事务,会自动结束并返回。...注意:死锁检测机制在MySQL后续的高版本中是默认开启的,但实际上死锁检测的开销不小,上面三个并发事务阻塞时,会对「事务等待链表、锁的信息链表」共计检索六次,那当阻塞的并发事务越来越多时,检测的效率也会呈线性增长

    22610

    hhdb数据库介绍(9-19)

    Oracle兼容性说明数据类型兼容本节主要介绍 HHDB Server与Oracle 数据库中数据类型的详细兼容对比信息。...:指定同义词所在的逻辑库。在不填写的情况下,默认是在当前在的逻辑库下DROP同义词;对于公有同义词,则无需填写该项。 FORCE:指定强制删除同义词,即使其具有依赖表或用户定义的类型。...DATE数据类型(date):考虑到DATE在Oracle和MySQL模式下的含义不一样,由于257的开关粒度较粗,而259做了用户级别的开关,因此DATE自动转换为DATETIME的逻辑在259版本上进行处理...此章节列出计算节点支持的INFORMATION_SCHEMA中的表与其特殊处理内容如下:表名称特殊处理character_sets仅返回计算节点支持的字符集与校对集数据collations仅返回计算节点支持的字符集与校对集数据...返回空集innodb_sys_tablespaces返回空集innodb_sys_tablestats返回空集innodb_trx返回当前执行每个事务的事务详情key_column_usage返回索引的约束信息

    5820

    群组复制消息传递服务

    在MySQL 8.0.18中,我们使用群组复制消息传递服务扩展了内部服务集,因此形成了用于群组复制的通信框架。它允许群组复制插件以外的其它组件参与群组通信层。 那么它是如何设计的呢?...举一个例子 我们打算在群组复制的所有成员之间创建一个IRC (Internet Relay Chat),做一些简单的事情,发送一条消息,联机成员就会收到它。...群组里所有ONLINE成员,甚至是发送消息的成员,都将收到该消息。然后,群组复制将看到订阅的模块,并通知有新消息。 使用伪代码,我们需要定义一个函数,该函数将在收到消息时由服务调用: ?...要将带有“ IRC”标签的消息打印到错误日志,我们可以: ? 并在服务上注册函数: ? 服务收到后,将验证标签是否正确并使用它。...使用它 如果您对这个话题有兴趣,甚至打算开发自己的MySQL扩展,您可以在文档中找到详细信息https://dev.mysql.com/doc/dev/mysql-server/latest/group

    92430

    python字典及其属性

    参考链接: Python字典popitem() 字典是一个无序的数据集合,通常输出的顺序和定义的顺序不一致 1、字典的创建  s = {}                创建一个空集合 d = dict...        'age':18,         'score':61     } } print(students['03113009']['name'])            访问student字典中的...  services = {     'http':80,     'mysql':3306,     'smtp':25 } service.update(d1)        在原来字典的基础上增加...直接删除http为key的key和value #pop删除指定的key的key-value #如果key存在,删除,并返回删除key对应value #如果不存在,报错     item = services.pop...()            返回最后一组j键值对,若字典为空,则报错 #清空字典内容 services.clear() 9、字典的查看  #查看字典的key值     print(services.keys

    55520

    A little fun with InnoDB multi-versioning(14.有关InnoDB多版本中的一个小问题)

    执行以下命令,在MySQL CLI中,在一个新的连接上执行,不需要做特别的准备(并且要特别注意执行时间): ysql> show create table t \G ******************...我使用下面的脚本插入一百万行,然后每一行更新十次,保持事务打开和未提交: #!...漏洞的可见性 您可以看到不同操作所花费的时间中,飞行中数据“泄漏”的一些隐藏可见性。例如,扫描所有行的时间超过5秒,但是使用条件a > 1000000可以立即计算。...令人怀疑的是,> 500000的条件大约只需要扫描所有行的一半时间(因为它只需要做一半的工作)。当然,所有这些查询都返回一个空集。...此外,用户可以将这两种方法结合使用,在打开事务的同时使用read视图同时生成大量的小事务,这些事务各自只有少量的undo历史记录。这样可以更好地防止对罪魁祸首的检测。

    41630
    领券