执行一句SQL的情况

执行一句SQL的情况

推荐(免费):SQL

零、数据库驱动

MySQL 驱动在底层帮我们做了对数据库的连接,只有建立了连接了,才能够有后面的交互。

一、数据库连接池

数据库连接池有 Druid、C3P0、DBCP采用连接池大大节省了不断创建与销毁线程的开销,这就是有名的「池化」思想,不管是线程池还是 HTTP 连接池,都能看到它的身影

二、SQL 接口

MySQL 中处理请求的线程在获取到请求以后获取 SQL 语句去交给 SQL 接口去处理。

三、查询解析器

将 SQL 接口传递过来的 SQL 语句进行解析,翻译成 MySQL 自己能认识的语言。

四、MySQL 查询优化器

MySQL 会依据成本最小原则来选择使用对应的索引成本 = IO 成本 + CPU 成本IO成本 : 即从磁盘把数据加载到内存的成本,默认情况下,读取数据页的 IO 成本是 1,MySQL 是以页的形式读取数据的,即当用到某个数据时,并不会只读取这个数据,而会把这个数据相邻的数据也一起读到内存中,这就是有名的程序局部性原理,所以 MySQL 每次会读取一整页,一页的成本就是 1。所以 IO 的成本主要和页的大小有关CPU 成本:将数据读入内存后,还要检测数据是否满足条件和排序等 CPU 操作的成本,显然它与行数有关,默认情况下,检测记录的成本是 0.2。MySQL 优化器 会计算 「IO 成本 + CPU」 成本最小的那个索引来执行

五、存储引擎

查询优化器会调用存储引擎的接口,去执行 SQL,也就是说真正执行 SQL 的动作是在存储引擎中完成的。数据是被存放在内存或者是磁盘中的每次在执行 SQL 的时候都会将其数据加载到内存中,这块内存就是 InnoDB 中一个非常重要的组件:缓冲池 Buffer Pool

六、执行器

执行器最终最根据一系列的执行计划去调用存储引擎的接口去完成 SQL 的执行

SQL各个组件,执行流程

七、Buffer Pool

Buffer Pool (缓冲池)是 InnoDB 存储引擎中非常重要的内存结构,起到一个缓存的作用Buffer Pool 就是我们第一次在查询的时候会将查询的结果存到 Buffer Pool 中,这样后面再有请求的时候就会先从缓冲池中去查询,如果没有再去磁盘中查找,然后在放到 Buffer Pool 中Buffer Pool中被使用的数据回被加锁。
Buffer Pool

八、三个日志文件

1、undo 日志文件:记录数据被修改前的样子

作用:利用undo 日志文件完成事务回滚

在这里插入图片描述

2、redo 日志文件:记录数据被修改后的样子

redo 记录的是数据修改之后的值,不管事务是否提交都会记录下来MySQL 为了提高效率,所以将这些操作都先放在内存中去完成,更新后的数据会记录在 redo log buffer 中,然后会在某个时机将其持久化到磁盘中。
在这里插入图片描述

3、bin log 日志文件: 记录整个操作过程

性质 redo Log bin Log

文件大小redo log 的大小是固定的(配置中也可以设置,一般默认的就足够了)bin log 可通过配置参数max_bin log_size设置每个bin log文件的大小(但是一般不建议修改)。实现方式redo log是InnoDB引擎层实现的(也就是说是 Innodb 存储引起过独有的)bin log是 MySQL 层实现的,所有引擎都可以使用 bin log日志记录方式redo log 采用循环写的方式记录,当写到结尾时,会回到开头循环写日志。bin log 通过追加的方式记录,当文件大小大于给定值后,后续的日志会记录到新的文件上使用场景redo log适用于崩溃恢复(crash-safe)(这一点其实非常类似与 Redis 的持久化特征)bin log适用于主从复制和数据恢复

bin log 记录的是整个操作记录(这个对于主从复制具有非常重要的意义)

以上就是执行一句SQL的情况的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2019267.html

(0)
上一篇 2025年2月23日 18:46:56
下一篇 2025年2月23日 18:47:11

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • SQL出现5120错误怎么解决

    解决办法:1、检查登录用户是否具有足够的权限来访问或操作该数据库,确保该用户具有正确的权限;2、检查SQL Server服务的帐户是否具有访问指定文件或文件夹的权限,确保该帐户具有足够的权限来读取和写入该文件或文件夹;3、检查指定的数据库文…

    2025年3月13日
    200
  • sql server怎么安装-sql server安装教程

    php小编百草带您轻松学会sql server的安装方法。sql server是一款功能强大的关系数据库管理系统,是许多企业和组织首选的数据库解决方案。本文将详细介绍sql server的安装教程,包括下载安装包、配置系统要求、安装过程等。…

    2025年3月9日 互联网
    200
  • javascript和SQL有什么区别

    区别:JavaScript是一种基于原型编程、多范式的动态脚本语言,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。而SQL是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。 本教程操作环境…

    2025年3月7日
    200
  • 怎么利用Spring Boot监控SQL运行情况

    1. 准备工作 首先我们来创建一个 spring boot 工程,引入 mybatis 等,如下: 选一下 MyBatis 和 MySQL 驱动,做一个简单的测试案例。 先来连接一下数据库: spring.datasource.userna…

    2025年3月7日 编程技术
    200
  • springboot配置mybatis的sql执行超时时间怎么解决

    当某些sql因为不知名原因堵塞时,为了不影响后台服务运行,想要给sql增加执行时间限制,超时后就抛异常,保证后台线程不会因为sql堵塞而堵塞。 一、yml全局配置 单数据源可以,多数据源时会失效 二、java配置类配置 成功抛出超时异常。 …

    2025年3月6日
    200
  • 使用C/C++和SQLite的SQL

    在本节中,您将学习如何在 C/C++ 程序中使用 SQLite。 安装 在开始在 C/C++ 程序中使用 SQLite 之前,您需要确保您的计算机上设置了 SQLite 库。您可以查看SQLite安装章节来了解安装过程。 C/C++接口AP…

    2025年3月6日
    200
  • ASP.NET往数据库添加数据实例

    使用sql server建立一个数据库hovertree 然后使用以下脚本创建表hovertree_usermessage USE [hovertree]GO/****** Object: Table [dbo].[hovertree_us…

    编程技术 2025年3月6日
    200
  • 关于hibernate缓存的问题:

    1.     关于hibernate缓存的问题:1.1.1.         基本的缓存原理hibernate缓存分为二级,第一级存放于session中称为一级缓存,默认带有且不能卸载。 第二级是由sessionfactory控制的进程级缓…

    编程技术 2025年3月6日
    200
  • 用Hibernate实现分页查询

    例如:  从第2万条开始取出100条记录       代码:     query q = session.createquery(“from cat as c”);     q.setfirstresult(2000…

    编程技术 2025年3月6日
    200
  • ADO.NET调用存储过程

    一: 执行不带返回参数(input)的存储过程1: 首先在数据库写个存储过程, 如创建个 adduser存储过程。create proc adduser@id int,@name varchar(20),@sex varchar(20)as…

    编程技术 2025年3月6日
    200

发表回复

登录后才能评论