广告
返回顶部
首页 > 资讯 > 精选 >一条SQL语句执行过程时怎样的
  • 155
分享到

一条SQL语句执行过程时怎样的

2023-06-29 12:06:08 155人浏览 独家记忆
摘要

本篇内容主要讲解“一条sql语句执行过程时怎样的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“一条SQL语句执行过程时怎样的”吧!一、MySQL 体系架构- 连接池组件负责与客户端的通信,是半双

本篇内容主要讲解“一条sql语句执行过程时怎样的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“一条SQL语句执行过程时怎样的”吧!

    一、MySQL 体系架构

    一条SQL语句执行过程时怎样的

    - 连接池组件

    • 负责与客户端的通信,是半双工模式,这就意味着某一固定时刻只能由客户端向服务器请求或者服务器向客户端发送数据,而不能同时进行。

    • 验证用户名和密码是否正确(数据库 Mysql 的 user 表中进行验证),如果错误返回错误通知Access denied for user 'root'@'localhost'(using passWord:YES);如果正确,则会去 mysql 的权限表查询当前用户的权限。

    - 缓存组件

    也称为查询缓存,存储的数据是以键值对的形式进行存储,如果开启了缓存,那么在一条查询 SQL 语句进来时会先判断缓存中是否包含当前的 SQL 语句键值对,如果存在直接将其对应的结果返回,如果不存在再执行后面一系列操作。如果没有开启则直接跳过。

    show  variables  like  'have_query_cache'; # 查看缓存配置:show  variables  like  'query_cache_type'; # 查看是否开启show  variables  like  'query_cache_size'; # 查看缓存占用大小show  status  like  'Qcache%'; # 查看缓存状态信息

    一条SQL语句执行过程时怎样的

    一条SQL语句执行过程时怎样的

    缓存失效场景:

    • 查询语句不一致。前后两条查询 SQL 必须完全一致;

    • 查询语句中含有一些不确定的值时,则不会缓存。比如 now()、current_date()、curdate()、curtime()、rand()、uuid() 等;

    • 不使用任何表查询。如 select 'A';

    • 查询 mysql、infORMation_schema 或 performance_schema 数据库中的表时,不会走查询缓存;

    • 在存储的函数,触发器或事件的主体内执行的查询;

    • 如果表更改,则使用该表的所有高速缓存查询都变为无效并从缓存中删除,这包括使用 MERGE 映射到已更改表的表的查询。一个表可以被许多类型的语句改变,如 insert、update、delete、truncate table、alter table、drop table、drop database。

    通过上面的失效场景可以看出缓存是很容易失效的,所以如果不是查询次数远大于修改次数的话,使用缓存不仅不能提升查询效率还会拉低效率(每次读取后需要向缓存中保存一份,而缓存又容易被清除)。所以在 MySQL5.6 默认是关闭缓存的,并且在 8.0 直接被移除了。当然,如果场景需要用到,还是可以使用的。

    开启:

    在配置文件(linux 下是安装目录的 cnf 文件,windows 是安装目录下的 ini 文件)中,增加配置: query_cache_type = 1

    一条SQL语句执行过程时怎样的

    # 指定 SQL_NO_CACHE,SQL_CACHE 同理。SELECT  SQL_NO_CACHE  *  FROM  student  WHERE age > 20;

    - 分析器

    对客户端传来的 SQL 进行分析,这将包括预处理与解析过程,并进行关键词的提取、解析,并组成一个解析树。具体的解析词包括但不局限于 select/update/delete/or/in/where/group by/having/count/limit 等,如果分析到语法错误,会直接抛给

    客户端异常:ERROR:You have an error in your SQL syntax.。

    select *  from user where userId = 1234;

    在分析器中就通过语义规则器将 select from where 这些关键词提取和匹配出来,MySQL 会自动判断关键词和非关键词,将用户的匹配字段和自定义语句识别出来。这个阶段也会做一些校验:比如校验当前数据库是否存在 user 表,同时假如 user 表中不存在 userId 这个字段同样会报错:unknown column in field list.

    - 优化

    进入优化器说明 SQL 语句是符合标准语义规则并且可以执行。优化器会根据执行计划选择最优的选择,匹配合适的索引,选择最佳的方案。比如一个典型的例子是这样的:

    表 T,对 A、B、C 列建立联合索引 —— (A,B,C),在进行查询的时候,当 SQL 查询条件是:select xx where B=x and A=x and C=x。很多人会以为是用不到索引的,但其实会用到,虽然索引必须符合最左原则才能使用,但是本质上,优化器会自动将这条 SQL 优化为:where A=x and B=x and C=x,这种优化会为了底层能够匹配到索引,同时在这个阶段是自动按照执行计划进行预处理,MySQL 会计算各个执行方法的最佳时间,最终确定一条执行的 SQL 交给最后的执行器。

    优化器会根据扫描行数、是否使用临时表、是否排序等来判断是否使用某个索引,其中扫描行数的计算可以通过统计信息来估算得出,而统计信息可以看作是索引唯一数的数量,可以使用部分采样来估算,具体就是选择 N 个数据页,统计这些页上数据的不同值,得到一个平均值,然后乘以这个索引的页面数,就得到了。但是因为索引数据会变化,所以索引的统计信息也会变化。当变更的数据行数超过 1/M 的时候,就会重新计算一次统计信息。

    关于统计信息可以选择是否持久化::通过 innodb_stats_persistent,设置为 on 的时候,表示统计信息会持久化存储。这时,默认的 N 是 20,M 是 10。设置为 off 的时候,表示统计信息只存储在内存中。这时,默认的 N 是 8,M 是 16。

    没有使用最优索引如何优化:

    • 虽然会自动更新统计信息,但是但是不能保证统计信息是最新值,这就可能导致优化器选择了不同的索引导致执行变慢,所以可以通过 analyze table 表名 来重新计算索引的统计信息;

    • 在表名后面添加 force index(索引名) 语句来强制使用索引(不建议);

    • 将 SQL 进行修改成优化器可以选最优索引的实现方式;

    • 新建一个最优索引或者删除优化器误用的索引;

    - 执行器

    执行器会调用对应的存储引擎执行 SQL,主流的是 MyISAM 和 Innodb。

    一条SQL语句执行过程时怎样的

    二、写操作执行过程

    一条SQL语句执行过程时怎样的

    三、读操作执行过程

    在 MySQL 5.6 之后引入了 索引下推(Index Condition Pushdown),所以在查询操作上会有一个 Index Filter 和 Table Filter 的过程,查询的流程图大致可以用下面这张图来概括:

    一条SQL语句执行过程时怎样的

    四、SQL执行顺序

    一条SQL语句执行过程时怎样的

    到此,相信大家对“一条SQL语句执行过程时怎样的”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    --结束END--

    本文标题: 一条SQL语句执行过程时怎样的

    本文链接: https://www.lsjlt.com/news/324908.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • 一条SQL语句执行过程时怎样的
      本篇内容主要讲解“一条SQL语句执行过程时怎样的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“一条SQL语句执行过程时怎样的”吧!一、MySQL 体系架构- 连接池组件负责与客户端的通信,是半双...
      99+
      2023-06-29
    • 一条SQL语句执行过程
      目录一、MySQL 体系架构- 连接池组件- 缓存组件- 分析器- 优化器- 执行器二、写操作执行过程三、读操作执行过程四、SQL执行顺序一、MySQL 体系架构 - 连接池组件 ...
      99+
      2022-11-13
    • 一条SQL更新语句的执行过程解析
      目录一、执行过程二、日志模块1、物理日志redo logredo log的使用场景redolog配置2、逻辑日志binlog两阶段提交binlog使用场景前言: 上一篇文章讲解了SQ...
      99+
      2022-11-13
    • 一条SQL更新语句的执行过程是什么
      这篇“一条SQL更新语句的执行过程是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“一条SQL更新语句的执行过程是什么”文...
      99+
      2023-06-30
    • 怎么执行一条SQL更新语句
      这篇文章给大家分享的是有关怎么执行一条SQL更新语句的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、前言前面我们系统了解了一个查询语句的执行流程,并介绍了执行过程中涉及的处理模...
      99+
      2022-10-18
    • MySQL执行一条查询语句的过程
        执行流程 如下图所示,我们可以看到当向 MySQL 发送一个请求时,MySQL 到底做了什么:   客户端发送一条査询给服务器。 服务器先检查査询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果。否则进人下一阶段。 服务器端进...
      99+
      2018-04-18
      MySQL执行一条查询语句的过程
    • SQL语句的执行过程
      1.语法校验      如果在SQL计划缓存中没有对应的执行计划,服务器首先会对用户请求的SQL语句进行语法效验,如果有语法错误,服务器会结束查询操作,并用返回相应的错误信息给...
      99+
      2022-10-18
    • 一条SQL语句在MySQL中怎么执行的
      小编给大家分享一下一条SQL语句在MySQL中怎么执行的,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一 MySQL 基础架构分...
      99+
      2022-10-18
    • Java MyBatis是怎么执行一条SQL语句的
      今天小编给大家分享一下Java MyBatis是怎么执行一条SQL语句的的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下...
      99+
      2023-07-02
    • Mysql执行一条语句的整个过程详细
      目录1.Mysql的逻辑架构2.连接器3.分析器4.优化器5.执行器6.Mysql执行一条更新语句的过程7.redo log8.bin log1.Mysql的逻辑架构 Mysql的逻...
      99+
      2022-11-13
    • 论一条select语句在MySQL是怎样执行的
      目录一、从宏观的角度分析MySQL二、一条SQL执行要经过多少困难?2-1 连接器2-2 查询缓存2-3 分析器2-4 优化器2-5 执行器一、从宏观的角度分析MySQL 首先看一张经典图片(MySQL逻辑架构图)...
      99+
      2022-05-22
      select执行MySQL语句 MySQL select执行
    • SQL查询语句执行的过程
      目录MySQL基本架构Server 层1、连接器2、查询缓存3、分析器4、优化器5、执行器SQL语句举例: SELECT * FROM `test` WHERE `i...
      99+
      2022-11-13
    • 浅谈MyBatis 如何执行一条 SQL语句
      目录前言 基础组件 工作流程 初步使用 详细流程 获取 MapperProxy 对象 缓存执行方法 构造参数 获取需要执行的 SQL 对象 执行 SQL 语句 总结 前言 Myba...
      99+
      2022-11-12
    • 一条SQL查询语句是如何执行的?
      导读 Mysql在中小型企业中是个香饽饽,目前主流的数据库之一,几乎没有一个后端开发者不会使用的,但是作为一个老司机,仅仅会用真的不够。 今天陈某透过一个简单的查询语句来讲述在Mysql内部的执行过程。 selec&...
      99+
      2019-06-13
      一条SQL查询语句是如何执行的?
    • 一条SQL更新语句是如何执行的
      文章首发于公众号「蝉沐风」,认真写好每一篇文章,欢迎大家关注交流 这是图解MySQL的第2篇文章,这篇文章会通过一条SQL更新语句的执行流程让大家清楚地明白: 什么是InnoDB页?缓存页又是什么?为什么这么设计? 什么是表空间?不...
      99+
      2014-08-03
      一条SQL更新语句是如何执行的
    • Java MyBatis是如何执行一条SQL语句的
      目录背景阅读环境阅读过程加载XML的过程创建Mapper获得一个Mapper执行一个Mapper的方法结论背景 在前两天的一次面试中,面试官问了一个和标题一样的问题,由于一直认为My...
      99+
      2022-11-13
    • Mysql执行一条语句的整个过程是什么
      这篇文章主要介绍Mysql执行一条语句的整个过程是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.Mysql的逻辑架构Mysql的逻辑架构如下所示,整体分为两部分,Server层和存储引擎层。与存储引擎无关的操...
      99+
      2023-06-29
    • 存储过程+job 定时执行固定的SQL语句
      做报表时,需要读取大量数据和进行复杂的计算,往往比较耗时,所以一般会将结果存放在一张结果表中,报表直接读取结果表,这样就会很快了。此时,为了更新结果表,获得最新数据,就需要定时执行一些SQL语句,此时可...
      99+
      2022-10-18
    • 【转】 一条 SQL 的执行过程详解
      MySQL 体系架构 - 连接池组件 负责与客户端的通信,是半双工模式,这就意味着某一固定时刻只能由客户端向服务器请求或者服务器向客户端发送数据,而不能同时进行。 验证用户名和密码是否正确(数据库 MySQL 的 user 表中进行验证...
      99+
      2015-03-17
      【转】 一条 SQL 的执行过程详解
    • sql语句执行顺序是怎样的
      这篇文章主要介绍了sql语句执行顺序是怎样的,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。sql语句执行顺序:1、最先执行from tab;...
      99+
      2022-10-18
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作