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

Sql语句在Mysql中的执行流程

2) 查询缓存(MySQL 8.0 版本后移除)             查询缓存主要用来缓存我们所执行的 SELECT 语句以及该语句的结果集。             ...连接建立后,执行查询语句的时候,会先查询缓存,MySQL 会先校验这个 sql 是否执行过,以 Key-Value 的形式缓存在内存中,Key 是查询预计,Value 是结果集。...当然在真正执行缓存查询的时候还是会校验用户的权限,是否有该表的查询条件。             ...MySQL 查询不建议使用缓存,因为查询缓存失效在实际业务场景中可能会非常频繁,假如你对一个表更新的话,这个表上的所有的查询缓存都会被清空。...5) 执行器             当选择了执行方案后,MySQL 就准备开始执行了,首先执行前会校验该用户有没有权限,如果没有权限,就会返回错误信息,如果有权限,就会去调用引擎的接口,返回接口执行的结果

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

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

    mysql> select * from T where ID=10; 开门见山,当我们输入一条 SQL 语句的时候,MySQL 内部究竟执行了什么?...修改完成后,只有再重新建立的连接才会使用到新的权限设置。 建立连接的过程通常是比较复杂的,所以我建议你在使用中要尽量减少建立连接的动作,也就是尽量使用长连接。...MySQL 拿到一个查询语句,会先查询缓存,先校验这个语句是否执行过,以 key-value 的形式存在内存里, Key 是查询预计,Value 是结果集。...优化器 经过了分析器分析,MySQL 知道你要干啥了,在开始执行之前,还要先经过优化器的处理。...执行器 当选择了执行方案后,MySQL 就准备开始执行了,首先执行前会校验该用户有没有权限,如果没有权限,就会返回错误信息,如果有权限,就会去调用引擎的接口,返回接口执行的结果。

    4.4K20

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

    来源:JavaGuide | 作者:木木匠 本篇文章会分析一个 sql 语句在 MySQL 中的执行流程,包括 sql 的查询在 MySQL 内部会怎么流转,sql 语句的更新是怎么完成的。...一 MySQL 基础架构分析 1.1 MySQL 基本架构概览 下图是 MySQL 的一个简要架构图,从下图你可以很清晰的看到用户的 SQL 语句在 MySQL 内部是如何执行的。...连接建立后,执行查询语句的时候,会先查询缓存,MySQL 会先校验这个 sql 是否执行过,以 Key-Value 的形式缓存在内存中,Key 是查询预计,Value 是结果集。...MySQL 查询不建议使用缓存,因为查询缓存失效在实际业务场景中可能会非常频繁,假如你对一个表更新的话,这个表上的所有的查询缓存都会被清空。对于不经常更新的数据来说,使用缓存还是可以的。...: 先检查该语句是否有权限,如果没有权限,直接返回错误信息,如果有权限,在 MySQL8.0 版本以前,会先查询缓存,以这条 sql 语句为 key 在内存中查询是否有结果,如果有直接缓存,如果没有,执行下一步

    3.5K20

    第17问:如何评估 alter table 的进度?

    问题 我们执行 alter table 语句后,经常面临“跑又跑不完,杀又不敢杀”的窘境。 如果能评估 alter table 的进度就幸福多了。...实验 MySQL官方已经给出了文档:https://dev.mysql.com/doc/refman/5.7/en/monitor-alter-table-performance-schema.html...还是按照之前实验 11 的技巧,快速造一些数据: 重复执行 insert,让表中有足够数据: 我们来跑一个alter table: 在另一个 session 中,执行 SQL 查看进度: 看起来 SQL...不断获取进度: 可以看到,估算的剩余时间不是完全精确,在整个过程中,进度在不停被评估。不过这种精确度对于我们也足够用了。...ID 工作量评估,MySQL 将 DDL 的运行过程拆成一个一个任务包,这里提供了已经完成的任务包数量和估算的任务包总数量,两者的比值即为当前进度 (注意:这里的时间是当前阶段的时间,而工作量评估是整个语句的工作量

    1.1K20

    MySQL 案例:如何监控DDL

    背景 经常会有用户在咨询大表 DDL 的进度,预估时间等信息,其实依靠经验来做判断的话,比较容易出现误差,而且也和评估人的实际评估手段有较大的关系。...首先需要打开performance_schema(腾讯云 MySQL 需要留意是否开启了这个参数),然后在setup_instruments表中开启 alter 操作对应的监控项以及p_f(performance_schema...: alter table sbtest.sbtest1 modify c varchar(128) NOT NULL DEFAULT ''; 因为开启了 p_f 的参数,所以现在能在内存表里面看到具体的数据了...实际上运行的时间可以参考语句执行的具体时间: mysql> alter table sbtest.sbtest1 modify c varchar(120) NOT NULL DEFAULT '';...,current 表本身只能看到当前阶段的进度,可以通过定期的查询来估算进度。

    1.6K90

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

    来源:http://t.cn/E6U9Z9T ---- 概览 本篇文章会分析下一个sql语句在mysql中的执行流程,包括sql的查询在mysql内部会怎么流转,sql语句的更新是怎么完成的。...查询缓存 连接建立后,执行查询语句的时候,会先查询缓存,Mysql会先校验这个sql是否执行过,以Key-Value的形式缓存在内存中,Key是查询预计,Value是结果集。...执行器 当选择了执行方案后,mysql就准备开始执行了,首先执行前会校验该用户有没有权限,如果没有权限,就会返回错误信息,如果有权限,就会去调用引擎的接口,返回接口执行的结果。...二、语句分析 2.1 查询语句 说了以上这么多,那么究竟一条sql语句是如何执行的呢?其实我们的sql可以分为2中,一种是查询,一种是更新(增加,更新,删除)。...: 先检查该语句是否有权限,如果没有权限,直接返回错误信息,如果有权限,在mysql8.0版本以前,会先查询缓存,以这条sql语句为key在内存中查询是否有结果,如果有直接缓存,如果没有,执行下一步。

    2K20

    一文搞懂select语句在MySQL中的执行流程!

    select * from user where user_id = 1001; 当我们在MySQL的命令行中输入上述SQL语句时,这条SQL语句到底在MySQL中是如何执行的呢?...MySQL逻辑架构 在介绍select语句在MySQL中的执行流程之前,我们先来看看MySQL的逻辑架构,因为任何SQL语句的执行都离不开MySQL逻辑架构的支撑。...也就是说,SQL语句在MySQL中的执行流程与MySQL的逻辑架构是密不可分的。 ? 在上图中,我们简单的画了下MySQL的逻辑架构图,并且给出了逻辑分层和每层中各部分的功能。...而且在MySQL 8.0中,直接删除了查询缓存的功能(冰河在看MySQL源码时,也证明了这一点)。 分析器对select语句做了什么? 分析器主要是对select语句进行 词法分析和语法分析 操作。...如果开启了慢查询的话,执行select语句时,会在慢查询日志中输出一个rows_examined字段,这个字段表示select语句在执行的过程中扫描了数据表中的多少行数据。

    4.1K20

    SQL语句在MYSQL中的运行过程和各个组件的介绍

    ,在连接过程中如果长时间没有操作则会在默认的时间内进行断开连接(wait_timeout)。...长连接:当用户在一次连接后不断开频繁使用,(长连接)但是会出现MysqL的内存飙升的问题,因为长连接里面的的对象不会去被销毁的会一直积压,只有当断开连接的时候才会进行销毁,所以可以设置默认的值进行断开连接...通过词法分析的结果进行语法分析,来判断zheduan语句是否符合MYSQL的语法 如果符合就会通过进行下一步,如果错误则会报错 you hava an erro in your SQL syntax...优化器: 优化器是当表中有多个索引的时候来决定使用那个索引,或者在一个语句有多表关联的时候,决定各个表的连接执行顺序。...(ROWS_EXAMINED字段 表示这个语句执行过程中扫描了多少行,这个值就是在执行器每次调用引擎接口获取数据行的时候累加的)

    1.9K30

    MySQL大表删除工具pt-osc​

    :40个, 包含索引个数:6个, 表空间ibd文件:3G左右 看到这个信息,我询问业务方这个表里面的数据是冷数据还是热数据,还有没有线上使用,得到的回复是一直在使用。...导入完成之后,我们在测试环境上直接使用alter table的操作进行处理, 这里说说alter操作对表造成的影响,在MySQL5.6之前,在alter这个时间段里面,表是被加了锁的(写锁),加写锁时其他用户只能...值得注意的一点是,在进行alter table的过程中,可以看到show processlist的state字段提示是“copy to tmp table”,也就是alter table操作会将当前的表拷贝到一个临时的表结构中...pt-osc工具的工作原理及步骤 : 1. 创建需要执行alter操作的原表的一个临时表,然后在临时表中更改表结构。 2....指定此选项可以让你看到该工具所执行的语句 --user= 连接mysql的用户名 --password= 连接mysql的密码 --host= 连接mysql的地址 P=

    2.4K10

    TiDB,有点意思了。

    ,说说TiDB这个小优点吧: 我们知道,在MySQL中,如果我们执行一个大表变更,alter table , 具体执行到什么阶段了,其实我们是无法知道的,只有等待MySQL给我们返回Query OK,我们才知道这个操作执行完了...当然,如果你想知道alter table的执行进度,可以使用pt-osc工具,你能看到下面的输出: Copying `db`....`table`: 91% 00:21 remain 从这个输出结果,我们可以判断当前正在进行的alter table操作的进度,同时还给出了一个剩余的执行时间,这对于用户来说,也是非常友好的。...然而,在TiDB中,如果你执行一个alter table的语句,在客户端没有返回的时候,可以通过另外一个客户端利用 admin show ddl命令,查看当前操作的进度,这个命令不会阻塞,如下: admin...如果你想要一个更加详细的结果,还可以通过ADMIN SHOW DDL JOBS 语句用于查看当前 DDL 作业队列中的所有结果(包括正在运行以及等待运行的任务)以及已执行完成的 DDL 作业队列中的最近十条结果

    94730

    应用示例荟萃 | performance_schema全方位介绍(下)

    语句文本的功能,问在MySQL数据库层能否查看到具体的SQL文本,看看是否有哪里写错了。...中也提供了类似的功能,通过阶段事件中具有可预估工作量的阶段事件进行记录与计算,就可以得到一个语句的执行的阶段信息和进度信息,下面我们分别举例介绍如何查看 4.1 查看SQL执行阶段 首先, 我们需要进行配置启用...(会话2) root@localhost : sbtest 03:37:32> alter table sbtest1 add index i_c(c); 此时,在会话1中查询阶段事件信息(此时DDL语句并未执行完成...alter语句添加索引的执行全过程,以及每一个过程的时间开销等信息,执行时间最长的是stage/innodb/alter table (merge sort),其次是stage/innodb/alter...) 4.2 查看SQL执行进度 在官方MySQL 版本中,performance_schema下并没有很直观地查询整个语句执行进度的方法,但是可以借助后续章节中介绍的sys.session视图进行查看

    2.2K30

    MySQL 5.7 特性:Online DDL

    本文详细解释 MySQL DDL 的原理,以及尽可能减少 DDL 对业务的影响的办法。 MySQL DDL 的方法 MySQL 的 DDL 有很多种方法。...如果使用的是 MySQL 自带的 DDL,MySQL 5.7 可以开启 DDL 监控,使用以下语句查看 DDL 执行进度: SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED...这个时候 SHOW PROCESSLIST 看到的语句状态为 waiting for metadata lock。...其他 MySQL 的 inplace 算法虽然支持在 DDL 过程中间的读写,但是对写入的数据量有上限,不能超过 innodb_online_alter_log_max_size(默认为 128M)。...重放 row_log 中的操作到 new_table 的索引上(not-rebuild 数据是在原表上更新)。 重放 row_log 中的DML操作到 new_table 的数据行上。

    8.1K142

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

    文章目录 示例 解释 一条select语句在MySQL中的奇幻之旅 示例 explain select * from emp; 解释 列(Column) 含义(Meaning) id The SELECT...identifier(每个select子句的标识id) select_type The SELECT type(select语句的类型) table The table for the output...type:此列是在优化SQL语句时最需要关注的列之一,此列显示了查询使用了何种类型。...语句为value IN (SELECT primary_key FROM single_table WHERE some_expr) index_subquery:子查询中的返回结果字段组合是一个索引(...:对数据使用一个外部的索引排序 Using index condition:使用了索引下推 一条select语句在MySQL中的奇幻之旅 注:MySQL8.0起以取消图中第九步(查询缓存)原因:把查询语句作为

    1.2K20

    【MySQL】DDL和DML

    5.1 查询表 查询当前数据库下所有表名称 SHOW TABLES; 我们创建的数据库中没有任何表,因此我们进入mysql自带的mysql数据库,执行上述语句查看 查询表结构 DESC 表名称...; 查看mysql数据库中func表的结构,运行语句如下: 5.2 创建表 创建表 CREATE TABLE 表名 ( 字段名1 数据类型1, 字段名2 数据类型2,...ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型; ​ -- 将stu表中的address字段名改为 addr,类型改为varchar(50) alter table stu change...address addr varchar(50); 删除列 ALTER TABLE 表名 DROP 列名; ​ -- 将stu表中的addr字段 删除 alter table stu drop...那么有没有刚好的工具提供给我们进行使用呢? 有。 6.1 navicat概述 Navicat for MySQL 是管理和开发 MySQL 或 MariaDB 的理想解决方案。

    23830

    重现一条简单SQL的优化过程

    select部分的执行计划如下图所示: 看到这个计划,就想对数据库说一句:"您辛苦了!"。...有同事就提出这个SQL在大表上全表扫描2500次,在大表的关联字段上加上索引就可以了,看到这里,你有没有认同这个见解呢?我想应该有很多小伙伴是认同的。...不错,给大表加上索引就不用全表扫描了,首先大表加索引,会锁表很长时间,这个索引在客户的生产环境须等到变更窗口才能加,客户等不及,其次你有考虑过这真的是最好的办法吗?...mysql> alter table t_2 add key(i_id); Query OK, 0 rows affected (0.05 sec) Records: 0 Duplicates: 0...sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> alter table t_1 add key(w_id,w_name); Query OK,

    19310
    领券