MySQL中的SQL执行流程

Verilog实战:手把手教你实现四路组相联Cache(附完整代码解析) 本文提供了一份详细的Verilog实战指南,手把手教你实现一个四路组相联Cache。内容涵盖从设计规格、核心存储阵列、LRU替换策略到状态机设计的完整流程,并附有代码解析与优化技巧,旨在帮助硬件设计者掌握Cache控制器的RTL实现与调试方法。 阅读详情

SQL执行流程

MySQL的配置文件的位置

/etc/my.cnf

MySQL中的SQL执行流程

image-20220311193805957

MySQL的查询流程

  1. 查询缓存:Server如果在查询缓存中发现了这条SQL语句,就会直接将结果返回给客户端;如果没有,如果进入到解析器阶段。需要说明的是,因为查询混窜往往效率不高,所以在MySQL8.0之后就抛弃了这个功能

MySQL拿到一个查询请求后,会先到查询缓存看看,之前是不是执行过这条语句。之前执行过的语句及其结果可能会以key-value对的形式,被直接缓存在内存中。key是查询的语句,value是查询的结果。如果你的查询能够直接在这个缓存中找到key,那么这个value就会被直接返回给客户端。如果语句不在查询缓存中,就会继续后面的执行阶段。执行完成后,执行结果会被存入查询缓存中。所以,如果查询命中缓存,MySQL不需要执行后面的复杂操作,就可以直接返回结果,这个效率会很高。

大多数情况查询缓存就是个鸡肋,为什么呢?

查询缓存是提前把查询结果缓存起来,这样下次不需要执行就可以直接拿到结果。需要说明的是,在MySQL中的查询缓存,不是缓存查询计划,而是查询对应的结果。这就意味着查询匹配的鲁棒性大大降低,只有相同的查询操作才会命中查询缓存。两个查询请求在任何字符上的不同(例如:空格、注释、大小写),都会导致缓存不会命中。因此 MySQL的查询缓存命中率不高。

同时,如果查询请求中包含某些系统函数、用户自定义变量和函数、一些系统表,如mysql、 information_schema、performance_schema数据库中的表,那这个请求就不会被缓存。以某些系统函数举例,可能同样的函数的两次调用会产生不一样的结果,比如函数NOW,每次调用都会产生最新的当前时间,如果在一个查询请求中调用了这个函数,那即使查询请求的文本信息都一样,那不同时间的两次查询也应该得到不同的结果,如果在第一次查询时就缓存了,那第二次查询的时候直接使用第一次查询的结果就是错误的!

此外,既然是缓存,那就有它缓存失效的时候。MySQL的缓存系统会监测涉及到的每张表,只要该表的结构或者数据被修改,如对该表使用了INSERT、UPDATE、DELETE、TRUNCATE TABLE、ALTER TABLE、DROPT ABLE或 DROP DATABASE语句,那使用该表的所有高速缓存查询都将变为无效并从高速缓存中删除!对于更新压力大的数据库来说,查询缓存的命中率会非常低。

总之,因为查询缓存往往弊大于利,查询缓存的失效非常频繁。

一般建议大家在静态表里使用查询缓存,什么叫静态表呢?就是一般我们极少更新的表。比如,一个系统配置表、字典表,这张表上的查询才适合使用查询缓存。好在MySQL也提供了这种“按需使用”的方式。你可以将my.cnf参数query_cache_type设置成DEMAND,代表当sql语句中有SQL_CACHE关键词时才缓存。比如:

#query_cache_type有3个值0代表关闭查询缓存0FF,1代表开启ON,2(DEMAND)
query_cache_type=2

这样对于默认的SQL语句都不使用查询缓存。而对于你确定要使用查询缓存的语句,可以用SQL_CACHE显式指定,像下面这个语句一样:

select sQL_CACHE * from test where ID=5;

如果SQL语句正确,则会生成这样一颗语法树

image-20220311200936291

下面是SQL词法分析过程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n9cq32Lc-1647062843063)(https://cdn.jsdelivr.net/gh/losserlong/pictures/20220312132649.png)]

都有哪些维度可以进行数据库调优?简言之:。

  • 索引失效,没有充分利用到索引——索引建立

  • 关联查询太多JOIN(设计缺陷或不得已的需求)——SQL优化

  • 服务器调优及各个参数设置(缓冲、线程数等)——调整my.cnf

  • 数据过多――分库分表

比如:表test中,ID字段没有索引,那么执行流程是这样的:

调用InnoDB引擎接口取这个表的第一行,判断ID值是不是1,如果不是则跳过,如果是则将这行存在结果集中;调用引擎接口取"下一行",重复相同的判断逻辑,直到取到这个表的最后一行。

执行器将上述遍历过程中所有满足条件的行组成的记录集作为结果集返回给客户端。

至此,这个语句就执行完成了。对于有索引的表,执行的逻辑也差不多。

SQL语句在MySQL中的执行流程是:SQL语句->查询缓存->解析器->优化器->执行器

image-20220312103517990

MySQL8中的SQL执行原理

前面的结构图很复杂,我们需要抓取最核心的部分: SQL的执行原理。不同的DBMS的SQL的执行原理是相通的,只是在不同的软件中,各有各的实现路径。

既然一条SQL语句会经历不同的模块,那我们就来看下,在不同的模块中,SQL执行所使用的资源(时间)是怎样的。如何在MysQL中对一条SQL语句的执行时间进行分析。

确认profiling是否开启

了解查询语句底层执行的过程: select @@profiling;或者show variables like '%profiling%'查看是否开启计划。开启它可以让MySQL收集在SQL执行时所使用的资源情况,命令如下:

select  @@profiling;

show variables like '%profiling%';

image-20220312112750210

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S8U9WgPK-1647062843064)(https://cdn.jsdelivr.net/gh/losserlong/pictures/20220312132656.png)]

profiling=0代表关闭,我们需要把profiling打开,即设置为1:

set profiling =1;

Profiling功能由MySQL会话变量:profiling控制。默认是OFF(关闭状态)

show profiles;

多次执行相同的SQL查询&&查看profiles

查看之前的执行的SQL语句

image-20220312114806095

查看profile

查看最近执行的一条SQL语句,也就是第12条

image-20220312114910197

查看指定的一条SQL的执行时间

mysql> show profile for query 10;

image-20220312115056782

1、查看cpu还有io的相关开销

mysql> show profile cpu , block io for query 6;

image-20220312125251907

在MySQL5.7中SQL执行原理

配置文件中开启查询缓存

vim /etc/my.cnf
在里面加上
query_cache_type=1

重启mysql服务

systemctl restart mysqld

开启查询执行计划

set profiling =1;

执行语句两次

 use atguigudb;
select * from employees limit 4;
select * from employees limit 4;

查看profiles

image-20220312130514358

查看profile

image-20220312131256754

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eWlJdf3Y-1647062843066)(https://cdn.jsdelivr.net/gh/losserlong/pictures/20220312132712.png)]

1、除了查看cpu、io阻塞等参数情况,还可以查询下列相关参数的利用情况

Syntax:
SHow PROFILE [type [, type] ... ]
[ FOR QUERY n]
[LIMIT row_count [OFFSET offset]]
type: {
ALL 	--显示所有参数的开销信息
|BLOCK I0 --显示I0的相关开销
|CONTEXT SWITCHES -- 上下文切换相关开销
|CPU --显示CPU相关开销信息
|IPC --显示发送和接收相关开销信息
|MEMORY --显示内存相关开销信息
|PAGE FAULTS --显示页面错误精关开销信息
|SOURCE --显示和Source_function, Source_file , Source_line 相关的开销信息
|SWAPS --显示交换次数相关的开销信息

2、发现两次查询当前情况都一致,说明没有缓存之说。

在8.0 版本之后,MySQL不再支持缓存的查询。一旦数据表有更新,缓存都将清空,因此只有数据表是静态的时候,或者数据表很少发生变化时,使用缓存查询才有价值,否则如果数据表经常更新,反而增加了SQL的查询时间。

注意在8.0中是不存在查询缓存的

SQL语法顺序

随着MySQL版本的更新换代,其优化器也在不断的升级,优化器会分析不同执行顺序产生的性能消耗不同而动态调整执行顺序。

需求:查询每个部门年龄高于20岁的人数且高于20岁人数不能少于2人,显示人数最多的第一名部门信息
下面是经常出现的查询顺序:

手写:

SELECT DISTINCT 
<select_list>
FROM
<left_table> <join_type>
JOIN <right_table> ON <join_condition>
WHERE
<where_condition>
GROUP BY
<group_by_list>
HAVING
<having_condition>
ORDER BY
<order_by_condition>
LIMIT 
<limit_number>

机读:

FROM <left_table>
ON <join_condition>
<join_type> JOIN <right_table>
WHERE <where_condition>
GROUP BY <group_by_list>
HAVING <having_condition>
SELECT
DISTINCT <select_list>
ORDER BY <order_by_condition>
LIMIT <limit_number>
2024顶级提示工程工具:提升效率的12个神器 LlamaIndex虽然本身不是直接的提示词编辑工具,但其整个设计都围绕着如何有效地将外部知识融入LLM的提示词。它提供了结构化的方式来管理“上下文窗口”——即哪些私有数据应该被包含在提示词中。通过优化索引结构和检索策略,可以确保提示词中包含最相关、最高质量的上下文信息,从而大幅提升LLM基于私有数据回答问题的准确性和相关性。同时,LlamaIndex允许开发者针对不同的查询类型和数据特点定制提示词模板,这使得提示词的复用和优化更加系统化。 阅读详情

相关推荐

node-red 可视化探索

配置socket选择配置流程产生url。

weixin_44133581的博客 3411

MySQL运维02-MySQL执行SQL文件的几种方式

MySQL运维02-MySQL执行SQL文件的几种方式

日拱一卒的博客 1万+

ROSTEA软件下载及情感分析详细操作教程(附网盘链接)

原ROST虚拟团队出品的ROST系列文本内容挖掘分析平台,是辅助人文社会科学研究的免费计算平台。该软件可以实现文本预处理、分字、分词、词性识别、特殊名词抽取、词频统计、英文词频统计、情感计算、分类算法、聚类算法等一系列文本挖掘,是人文社科研究和论文写作的一把利器。该软件用户量超过一万人,遍布海内外100多所大学,包括剑桥大学、日本北海道大学、北京大学、清华大学、香港城市大学、澳门大学等众多高校。关于ROSTCM6的安装介绍可以参考之前的文章ROSTCM6软件下载及语义网络分析详细操作教程ROST EA。

m0_64336780的博客 1万+

MySQL如何执行.sql 文件:详细教学指南

以上内容详细介绍了如何在不同环境下执行MySQL的.sql文件。无论你使用命令行客户端、图形化工具,还是批处理命令/Shell脚本,都可以轻松完成SQL脚本的执行。在实际操作中,根据具体需求选择适合自己的方法即可。希望这篇文章能帮助你顺利完成MySQL.sql文件的执行任务。

My_wife_QBL的博客 3万+

分布式爬虫架构实战:Scrapy+RabbitMQ+浏览器池,百万级数据抓取成本直降60%(附架构图+源码)

任务调度瓶颈:Redis 作为消息队列,不支持复杂任务优先级,高并发下容易消息堆积,且单点故障会导致全量任务丢失;资源浪费严重:每个爬虫节点每次爬取动态页面都启动新浏览器,启动耗时3-5秒,CPU 占用率高达80%+,单机最多同时跑3个浏览器;扩展性差:新增节点需要手动同步任务队列,节点忙闲不均,无法根据任务量动态分配资源。# 从settings读取RabbitMQ配置# 注册信号:爬虫关闭时关闭RabbitMQ连接"""启动时建立RabbitMQ连接"""

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1617

实现端到端加密的WebRTC视频会议终端

需要注意的是,上述示例代码中没有涉及到具体的加密算法和密钥交换过程,而是通过WebRTC API自动处理了加密和密钥交换的细节。然后,我们通过信令服务器将本地SDP发送给对方,并接收对方的SDP。最后,我们将对方的SDP设置为远程描述,并将最终的连接建立起来。最后,我们将对方的SDP设置为远程描述,并建立最终的连接。在本文中,我们将探讨如何使用WebRTC构建一个加密的视频会议终端,并提供相应的源代码。在本文中,我们将探讨如何使用WebRTC构建一个加密的视频会议终端,并提供相应的源代码。

WaJulia的博客 432

MySQL中SQL语句的执行过程详解

解析器是MySQL执行SQL语句的重要组件,通过词法分析和语法分析,将SQL语句转换为解析树。解析树是后续查询优化和执行的基础,确保SQL语句能够被正确理解和处理。1. 词法分析:输入: SELECT * FROM users WHERE id = 1;输出: 标记序列 [SELECT, *, FROM, users, WHERE, id, =, 1,;2. 语法分析:输入: 标记序列 [SELECT, *, FROM, users, WHERE, id, =, 1,;输出: 解析树。

www_tlj的专栏 2574

使用MATLAB和Simulink来设计并仿真一个智能家居火灾报警系统

智能家居火灾报警系统旨在通过烟雾传感器、温度传感器等设备监测家庭环境,一旦检测到异常情况(如烟雾或温度骤升),立即触发警报并采取相应措施。在这个教程中,我们将使用MATLAB和Simulink来设计并仿真一个智能家居火灾报警系统,包括数据采集、处理以及响应机制。

amy_mhd的博客 162

【MySQL】MySQL中SQL执行流程

这里需要注意的是在MySQL 8中,查询缓存功能已经被移除。在之前的MySQL版本中,查询缓存允许将查询结果缓存在内存中,以便在后续相同的查询请求中直接返回缓存结果,从而提高查询性能。在MySQL中,存储引擎是可插拔的,这意味着可以根据需求选择适合的存储引擎来管理数据。binlog有记录,redolog状态prepare:在binlog写完提交事务之前的crash,恢复操作:提交事务。binlog无记录,redolog状态prepare:在binlog写完之前的crash,恢复操作:回滚事务。

DreamSun的博客 3390

YOLOv11【第二章:核心模块进阶篇·第3节】LDConv线性可变形卷积改进YOLOv11!

🏆 本文收录于专栏 《YOLOv11实战:从入门到深度优化》。本专栏围绕 YOLOv11 的改进、训练、部署与工程优化 展开,系统梳理并复现当前主流的 YOLOv11 实战案例与优化方案,内容目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。

**My Coding Family** 7438

【雷达】基于matlab合成孔径雷达干涉测量(InSAR)时序分析【含Matlab源码 9037期】

合成孔径雷达干涉测量(InSAR)时序分析 完整代码,包运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 159

(一)大白话MySQL执行SQL的流程

MySQL的架构设计中,SQL接口、SQL解析器、查询优化器都是用的一套组件。所以我们来思考一下,假设我们的数据有的存放在内存里,有的存放在磁盘文件里如下图所示。举个例子,比如执行器可能会先调用存储引擎的一个接口,去获取“usrs”表中的第一行数据,然后判断一下这个数据的"id”字段的值是否等于我们期望的一个值,如果不是的话,那就继续调用存储引擎的接口,去获取“users”表的下一行数据。那么看完存储引擎之后,我们知道存储引擎可以帮助我们去访问内存以及磁盘上的数据,那么是谁来调用存储引擎的接口呢?

zht245648124的博客 2万+

YOLOv9原创自研:卷积魔改 | 一种新颖的风车形卷积(PConv)融合注意力机制,加强微弱小目标检测能力

为了进一步提升小目标检测能力,风车形卷积(PConv)融合注意力机制进一步提升小目标检测能力

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 358

【MySQL】十,SQL执行流程

SQL执行流程

zhcf的博客 696

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

图解MySQL的SQL语句执行全流程,看看自己的SQL语句是如何执行的

MySQL作为一种广泛使用的开源关系型数据库管理系统,其SQL语句的执行流程对于理解数据库性能优化、错误排查以及数据库设计都至关重要。

小白的大数据之旅的博客 1417

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

MySQL之SQL的执行流程

MySQL从架构上分为三层:连接层、服务层、存储引擎层。连接层用于连接管理,服务层用于对SQL的解析与优化,存储引擎层用于数据存储。三层相互配合实现SQL执行。

积跬步,至千里。 2527

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

MySQL 一条 SQL 执行流程解析

客户端请求:你发起了请求。连接和认证:MySQL 确认你的身份。SQL 语法解析:MySQL 检查语法是否正确。查询优化:优化器评估最佳执行方案。执行计划生成:生成执行计划,并与存储引擎互动。存储引擎处理:存储引擎负责数据操作。返回查询结果:将结果返回给客户端。这个过程是 MySQL 内部复杂而精细的运作机制,通过各种优化、计划选择、数据处理,最终让你得到想要的结果。希望今天的解析能让你更深入地理解 MySQL 处理 SQL 语句的过程!

萌萌白白的博客 1135

MySQL之SQL执行流程

MySQL之SQL执行流程

欧尼熊不懂 的博客 508

在MySQL中,一条SQL语句的执行全流程是怎样的?

在《》这篇文章中,我们讲解了MySQL的整体架构。那么,你是否有过类似的疑问:一条查询的SQL语句的底层到底是如何执行的?这篇文章,我们在MySQL的整体架构的基础上,进一步详细讲解一条SQL语句在此架构中的运行过程。

程序新视界 1318

MySQL SQL执行流程深度解析

场景问题:在一个大型电商平台上,每当用户进行商品搜索、浏览商品详情或下单购买时,数据库都会执行一系列的SQL查询操作。然而,随着时间的推移,系统逐渐暴露出响应速度慢、查询效率低下的问题。经过分析,发现这些问题很大程度上是由于对SQL执行流程的理解不足,导致编写出的SQL语句未能充分利用数据库的优化机制。因此,为了提高数据库查询效率,有必要深入了解MySQL的SQL执行流程。知识点介绍:MySQL的SQL执行流程是数据库执行SQL语句的核心机制,它决定了SQL语句从解析、优化到执行的全过程。

我是Java程序员廖志伟,感谢朋友们的支持!不定期贡献一篇高品质、过万文字、图文并茂且附有视频解说、满载代码示例注释的良心之作,坚决杜绝粗制乱造。 1167

MySQL进阶【1】 —— SQL的执行流程

你是否好奇SQL是怎么执行下去?是否好奇MySQL是怎么做到的执行SQL语句的呢?本篇博客将为你解惑!

LU_ZE_XX的博客 752

MySQL 中一条 SQL 的执行流程详解

本文详细解析了MySQL中SQL语句的执行流程,从客户端连接到最终结果返回。主要分为六个阶段:1)连接建立与权限验证;2)SQL解析(词法/语法分析生成解析树);3)预处理(语义检查、权限验证);4)查询优化(生成成本最低的执行计划);5)执行器调用存储引擎获取数据;6)结果返回客户端。不同SQL类型(SELECT/INSERT/UPDATE/DELETE)存在处理差异。理解这一流程对性能优化、索引设计、事务控制和故障排查至关重要,能帮助开发者深入理解数据库工作原理,写出更高效的SQL语句。

慢慢 1622

一条SQL语句在MySQL中的执行流程

1. 先通过校验权限2. 利用进行SQL语句的词法分析和语法分析,构建解析树3. 使用选择合适的索引和表连接顺序,最终选择一个最佳的执行计划4. 利用,调用引擎层查询数据,返回结果集给客户端。

qq_74916326的博客 377

mysql执行一条sql语句的流程

**缓存命中与返回**:若找到匹配的查询,且缓存中的结果未过期,服务器直接把缓存中的结果返回给客户端,流程结束。### 5. 查询优化 - **生成执行计划**:查询优化器依据解析树和数据库的统计信息(如索引使用情况、表的行数等),生成多个可能的执行计划。### 6. 存储引擎交互 - **调用存储引擎接口**:服务器按照选定的执行计划,调用相应存储引擎(如 InnoDB、MyISAM 等)的接口来执行具体的操作。- **缓存更新**:若查询结果被修改,服务器会更新查询缓存,保证缓存中的数据是最新的。

qq_64040134的博客 676

SQL语句在 MySQL 中的执行流程

sql 语句在 MySQL 中的执行流程 转自:https://snailclimb.gitee.io/javaguide/#/database/一条sql语句在mysql中如何执行的 一 MySQL 基础架构分析 1.1 MySQL 基本架构概览 下图是 MySQL 的一个简要架构图,从下图你可以很清晰的看到用户的 SQL 语句在 MySQL 内部是如何执行的。 先简单介绍一下下图涉及的一些...

Thetop 332

Mysql架构与SQL执行流程

Mysql 记录

weixin_41300437的博客 381
上一篇: 存储过程与存储函数
下一篇: MySQL存储引擎
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值