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

一条查询SQLMySQL是怎么执行

平时我们使用的数据库,看到的通常是一个整体,比如我们执行一条查询SQL,返回一个结果集,却不知道这条语句MySQL内部是如何执行的,接下来我们就来简单的拆解一下MySQL,看看MySQL是由哪些“零件...从图中我们可以看到Server层由多个组件,从连接器开始到执行器,接下来我们使用一条简单查询语句,来依次分析每个组件的作用。...当我们全部使用长连接后,会发现有时候MySQL专用内存涨的特别快,这是因为MySQL执行过程临时使用的内存是管理连接对象里面的,这些资源会在连接断开的时候才释放,所以长时间使用长连接累计下来,可能导致内存占用太大...这个问题也不是不能解决的,常用的方案主要有以下两种: 定期断开长连接。使用一段时间,或者程序里面判断执行过一个占用内存的大查询后,断开连接,之后要查询再重连。...如果查询语句缓存可以查到这个key,就直接把结果返回给客户端。如果语句不在缓存,就会继续执行后边的阶段。执行完成后,将执行结果存入缓存

4.8K20

Python 操作 MySQL 数据库(下)

本文字数:4150 字 阅读本文大概需要:11 分钟 写在之前 Python 操作 MySQL 数据库(上) 这篇文章,我们创建了一个叫 bookdb 的数据库,仅仅是个空架子,没有什么可操作的。...本篇文章,我会简要介绍如何使用 MySQL 以及如何用 Python 操作数据库,今天内容较多,下面让我们正式开始。...cursor([cursorclass]):返回连接的游标对象,通过游标执行 SQL 语句。 close():关闭连接。...这就如同编写一个文本一样,将文字写到文本上,必须执行 ctrl + s 才能保存。...Python 操作 MySQL 数据库到这就算写完了,这两部分很长,内容很长,我写的时间很长,希望能给你带来帮助,也希望你能认真的看下去,真是写的手都酸了。。

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

会优化,你真的会优化吗?其实你可能真的缺少一份理解【数据库篇】

直接上图吧,给大家展示一下子查询连接查询执行时间,(但是,一条sql语句的性能不能光靠查询时间来衡量,之前一篇博文里看到的,蛮有感觉的)   一、子查询统计 ? ?...执行了5.198sec   二、连接查询统计 ? ? 执行了0.010sec。   ...当客户端向服务端发送sql语句时,首先客户端会把查询语句做成一个单独的数据包发送给服务端,这时如果查询语句很长需要设置参数,如果实在太大,服务端可能会拒绝接受更多数据并抛出异常。...因而在实际开发,尽量保持查询简单且只返回必需的数据,减小通信间数据包的大小和数量是一个非常好的习惯,这也是查询尽量避免使用SELECT *以及加上LIMIT限制的原因之一。   ...4、我们查询数据库,可能会用多个范围条件来作限制,比如查询某一时间段内入职的某一年龄段的员工,此时需要接纳的一点是,MySQL无法同时使用俩个字段的索引,它只会选择一种的一个字段的索引来做查询

81860

MySQL SQL和索引优化总结

专栏持续更新MySQL详解 首先我们需要知道MySQL主要是从以下3个方面进行优化: SQL语句和索引 应用优化(引入缓存、连接池) 配置参数优化 一、SQL语句和索引的优化 当数据量比较大,若SQL...语句写的不合适,会导致SQL的执行效率低,我们需要等待很长时间才能拿到结果 针对性优化的时候,若数据量太大,可通过limit分页 explain分析的时候可能出现以下问题: 没有用索引 用多列索引没有用到第一列...,我们可以引入数据库连接池,这是高并发场景下常用的一种优化手段(需要设置初始连接量,最大连接量以及最大空闲时间等参数) 引入缓存;用于存储热点数据,如果客户端的请求来了,先在redis上查一下(redis...并发连接数量和超时时间 MySQL Server作为一个服务器,可以设置客户端的最大连接量和连接超时时间,如果数据库连接统计数量比较大,这两个参数的值需要设置大一些 配置文件(my.cnf或my.ini...设置超时时间,超过设置时间没有请求就主动断开,单位是秒,配置文件添加配置:wait_timeout = 600 我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

18750

MySQL查询执行的基础

这种协议虽然让MySQL通信简单快速,但是也从很多地方限制了MySQL。一个明显的限制是,这意味着没法进行流量控制。一旦一端开始传送信息,另一端要接收完整个信息才能够响应它。...查询状态 对于一个MySQL连接或者说一个线程,任何时刻都有一个状态,该状态表示了MySQL当前正在做什么: Sleep: 线程正在等待客户端发送新的请求 Query: 线程正在执行查询或者正在将结果发送给客户端...这仍然是无需解析查询SQL语句的,因为查询缓存已经存放了当前查询需要访问的表信息。 如果权限没有问题,MySQL就会跳过所有其他阶段,直接从缓存表拿到结果并且返回给客户端。...相对于查询优化阶段,查询执行阶段并不那么复杂:MySQL只是简单的根据执行计划给出的指令逐步执行根据执行计划逐步执行的过程,有大量的操作需要通过调用存储引擎实现的接口来完成。...这样的处理也会让MySQL客户端第一时间获得返回的结果。

1.3K00

Mysqlsql执行如此慢

我们经常发现,往往执行一条简单查询语句,但是很长时间都没有返回,今天我们看看是什么原因导致的 第一类:查询时间不能返回 执行下面语句 select * from t where id =1;...我们发现sql语句很长时间都不见返回响应,我们先看一下他的状态,发现果然是被锁住了. ? 此类问题我们直接可以找到谁持有MDL的写锁,直接kill....可以用查询sys.schema_table_lock_waits这张表,我们就可以直接找到阻塞的process id ,把这个连接用kill命令断开即可(mysql启动的时候设置performation_schema...sessionA,我们故意调用一次sleep(1),默认执行10万秒,这个时候t表是打开的,使用flush去关闭表t,就必须等待sessionA结束,同时也会阻塞sessionC ?...实际上,kill 4才有效,也就是直接断开这个连接,这里连接被断开的时候,会自动回滚这个连接里面正在执行的线程,也就是释放id=1上的行锁.

1.6K30

关系型数据库之mysql

02 — MySQL的实际使用 对于mysql简单的增删该查我们同样也不再赘述,大家可以前往小程序,知识模块转载的有菜鸟教程的简单SQL语句,当然如果你使用电脑也可以直接前往菜鸟教程去查看。...这里做了如下的总结: 一.对于存在text,longtext这长度很长的字段的的表最好不要在全表扫描的时候用select * ,最好将此类字段排除出去,尤其获取数据比较多的时候,因为无用字段的读取也会增加查询时间...insert、update、delete语句的执行效率降低;再然后就是使用数据量少的索引,因为如果索引的值很长,那么查询的速度会受到影响。...MySQL的官方文档说到:空列需要额外的空间来记录它们的值是否为空。 四:选择正确的存储引擎 MySQL 中有两个存储引擎 MyISAM 和 InnoDB,每个引擎都有利有弊。...但是我不得不说一句,并不是SQL越长执行效率越慢,我见过公司的DBA帮我写一个邮件查询的语句,写了有五六行左右,但是查询速度都是毫秒级别。

3.5K00

数据库升级-成为MySQL DBA 博客系列(之二)

为此,您需要一个慢日志格式的查询列表。然后,可以使用pt-upgrade旧版本和新版本的MySQL上运行它们,比较响应时间和结果集。...为此,您可能需要引入一些额外的完整性检查—解析pt-upgrade输出,获取报告的慢速查询,再次服务器上执行这些查询,并再次比较结果。...你需要记住,你应该以同样的方式连接到新旧数据库服务器(套接字连接将比TCP更快)。 这种通用测试的典型结果是执行计划发生变化的查询—通常添加一些索引或强制优化器选择正确的查询就足够了。...您需要通过升级slave,执行升级所需的时间内将其停止运行(如果一切顺利,不超过几分钟的停机时间,即仅需很短的时间)。...那么是时候加载转储 - 这个过程也可能需要很长时间。一旦完成,你应该有一个新的和干净的MySQL 5.6节点。

1.4K30

MySQL(一)基本架构

若客户端很长时间没有动静,连接器就会自动将其断开,由参数wait_tieout控制,默认时间时8小时....全部使用长连接时,有时候MySQL占用内存涨得很快,这是因为MySQL执行过程临时使用的内存时管理连接对象得,这些资源会在断开连接时才释放,因此如果长连接累积下来,可能导致内存占用太大,被系统强行杀掉...MySQL5.7及以上的版本,则可以每次执行一个比较大的操作过后,通过执行mysql_reset_connection来重新初始化连接资源,这个过程不需要重连和权限验证,但会将连接恢复至刚创建完成的状态...若语句不在查询缓存,就会继续后续的执行阶段,执行完成后,执行结果会被存入查询缓存. 因此若查询命中缓存,MySQL需要执行后面的复杂操作,就可以直接返回结果....对于更新压力大的数据库来说,查询缓存的命中率会非常低,除非你的业务只有一张静态表,很长时间才更新一次.如一个系统配置表.

80040

MYSQL的基本架构

那这样就不能更好的发挥工具的潜在价值所以本文就来简单的介绍一下MYSQL数据库的基本架构 MYSQL内部可分为两大部分:Server层和存储层 server层中大致包含了以下部分: 连接查询缓存 分析层...优化层 执行层 首先介绍一下连接器 每次进入mysql前都需要登录,其实这就是在跟连接器打交道,你将登录信息给它检查,它提供你该数据库操作拥有的权限,我们所需要提供的登录信息如下所示: mysql...,就得重新建立新的连接 接下来介绍一下 查询缓存 缓存就是之前操作的信息暂时存储一个地方,查询就是查找之前操作过的信息 那在数据库查询缓存就是查询之前执行过的sql语句,这样的运行效率会很高,但是也有一个缺点就是表已更新...所以一般不用,除非那表是静态的,就是很长时间都不会更新的那种 为什么说查询缓存效率高呢?因为执行一个新的sql语句是需要很多流程的,当然使用的时候并没有表现出来。...除此之外,执行层还要确定该用户有没有执行该语句的权限,没有的话就会报错 最后,就是存储引擎对数据进行一系列操作啦,比如查询、插入、删除和修改等 以上大致就是Mysql的基本架构,希望可以帮助大家,

51630

查看MySQL查询计划的方法和格式

执行EXPLAIN时并没有真正的执行该后面的语句,因此可以安全的查看执行计划。 查看当前连接执行计划。...当用户发现有一个查询执行很长时间,用户需要分析执行缓慢的原因,这时可以通过EXPLAIN FOR CONNECTION语句查看当前执行语句的查询计划。...用户可以根据需要选择适用于自己的格式。 传统格式简单明了,输出是一个表格形式,概要说明查询计划。 ? JSON格式是四种格式里面输出信息最详尽的格式,里面还会包含执行成本信息。 ?...可视化输出,可以通过MySQL Workbench可视化查看MySQL执行计划。通过点击Workbench的放大镜图标,即可生成可视化的查询计划。 ? ?...上面的内容是关于查看执行计划的方法和输出格式,关于查询计划的输出内容,今后将找时间写一篇专题!

1.9K20

MySql 入门到精通-sql查询语句的执行过程,你真的知道吗?

首先,我们先来看看MySQL的基础架构,我们再平时写的最多的也就是 sql 查询语句,那么,对于一条简单查询语句,你可否有想过它是如何执行的,期间又经历了哪些步骤呢?...这个时候有些同学可能就会有疑问,由于 MySQL 执行过程临时使用的内存是管理连接对象里面的,如果全部使用长连接的话,有时就会出现 MySql 内存紧张,如果内存占用太大就会出现 OOM ,表现出来的就是出现...我们可以参考如下两种方案: 定期断开长连接。使用一段时间,或者程序里面判断执行过一个占用内存的大查询后,断开连接,之后要查询再重连。...这样的话,对于我们频繁更新的数据库来说,其实查询缓存的命中率是相当低的。当然,如果我们的表是一张静态表,比如配置表,更新操作间隔时间很长,那这样的表还是很试合使用查询缓存的。...总结 今天,我们主要学习了 MySQL 的逻辑架构,知道了其主要有两大部分 Server 和存储引擎层组成,然后,我们通过对于一条 SQL 语句的分析知道了其MySQL 的所有执行过程,主要从连接

1K30

一次浴火重生的MySQL优化(EXPLAIN命令详解)

但真正的优化并不是使用那些简单的手法去完成实现的,要想知道一条SQL语句执行效率低的原因,我们可以借助MySQL的一大神器---"EXPLAIN命令",EXPLAIN命令是查询性能优化不可缺少的一部分,...下面是我之前写的SQL语句(未优化前的),它执行时间是2.318sec,并且使用EXPLAIN命令进行分析: ?...首先说说EXPLAIN命令查询后打印的数据列它们各个列代表的意思:   1、id :该列的值是用来顺序标识整个查询SELELCT 语句的执行顺序,嵌套查询id越大的语句越先执行,该值可能为NULL...10、Extra :该列的值是EXPLAIN输出另外一个很重要的列,该列显示MySQL查询过程的一些详细信息,MySQL查询优化器执行查询的过程查询计划的重要补充信息。...根据上面的知识分析: 我通过MySQL EXPLAIN分析的思路是这样的:通常首先要根据id的值确定当前检索语句是何时执行的,注意分析的时候按顺序分析,其次根据type列的值来判断当前检索语句是否需要优化

94250

MySQL数据库进阶-SQL优化

MySQL的慢查询日志默认没有开启,需要MySQL的配置文件(/etc/my.cnf)配置如下信息: # 开启慢查询日志开关 slow_query_log=1 # 设置慢查询日志的时间为2秒,SQL...语句执行时间超过2秒,就会视为慢查询,记录慢查询日志 long_query_time=2 更改后记得重启MySQL服务,日志文件位置:/var/lib/mysql/localhost-slow.log...如何执行 SELECT 语句的信息,包括 SELECT 语句执行过程中表如何连接连接的顺序。...,表示查询执行 select 子句或者操作表的顺序(id相同,执行顺序从上到下;id不同,值越大越先执行) select_type:表示 SELECT 的类型,常见取值有 SIMPLE(简单表,...:MySQL认为必须要执行的行数,InnoDB引擎的表,是一个估计值,可能并不总是准确的 filtered:表示返回结果的行数占需读取行数的百分比,filtered的值越大越好 SQL 优化

13710

Explain 执行计划 和 SQL优化

EXPLAIN关键字一般放在SELECT查询语句的前面,用于描述MySQL如何执行查询操作、以及MySQL成功返回结果集需要执行的行数。...执行计划用来显示对应语句MySQL是如何执行的。 Explain语句对select,delete,update,insert,replace语句有效。...id列: 表示执行顺序,值越大则优先级越高;值相同则从上而下执行 select_type列常见的有: simple:表示不需要union操作或者不包含子查询简单select查询。...其他数据库也叫做唯一索引扫描 NULL:MySQL优化过程中分解语句,执行时甚至不用访问表或索引 possible_keys列 表示MySQL能使用哪个索引表中找到行,查询涉及到的字段上若存在索引...字段上增加函数,则字段上的索引用不了,需考虑改变写法 去掉不影响查询结果的表 慢查询日志 开启慢查询日志,分日里面执行时间很长语句 , 可以针对性的对常用语句进行建立索引 开启方法my.cnf

64720

MySQL性能优化

3.2.1 单线程   早期的 MySQL ,slave 的 SQL 线程是单线程。master 可以支持 SQL 语句的并行执行,配置了多少的最大连接数就是最多同时多少个 SQL 并行执行。...3.2.2 异步与全同步   首先我们需要知道,主从复制的过程MySQL 默认是异步复制的。也就是说,对于主节点来说,写入 binlog,事务结束,就返回给客户端了。...master 不会等待很长时间,但是 返回给客户端的时候,数据就即将写入成功了,因为它只剩最后一步了:就是读取 relay log,写入从库。    ...这个插件 mysql 的插件目录下已经有提供: cd /usr/lib64/mysql/plugin/   主库和从库是不同的插件,安装之后需要启用: -- 主库执行 INSTALL PLUGIN...子查询只能以这种方式进行,只有拿到内层的结果之后才能进行外层的查询

1.6K50

MySQL优化原理分析及优化方案总结

客户端用一个单独的数据包将查询请求发送给服务器,所以当查询语句很长的时候,需要设置 max_allowed_packet参数。...查询缓存 解析一个查询语句前,如果查询缓存是打开的,那么MySQL会检查这个查询语句是否命中查询缓存的数据。如果当前查询恰好命中查询缓存,检查一次用户权限后直接返回缓存的结果。...查询执行引擎 完成解析和优化阶段以后,MySQL会生成对应的执行计划,查询执行引擎根据执行计划给出的指令逐步执行得出结果。...即使查询不到数据,MySQL仍然会返回这个查询的相关信息,比如改查询影响到的行数以及执行时间等等。 如果查询缓存被打开且这个查询可以被缓存,MySQL也会将结果存放到缓存。...回头总结一下MySQL整个查询执行过程,总的来说分为6个步骤: 客户端向MySQL服务器发送一条查询请求 服务器首先检查查询缓存,如果命中缓存,则立刻返回存储缓存的结果。

73620

MySQL 查询执行的过程

或者一个语句有多表关联(join)的时候,决定各个表的连接顺序; 优化器:将语法树转化成执行计划。一条查询可以有多种执行方式,最终都返回相同的结果。优化器的作用就是找到其中最好的执行计划。...一旦一端开始发送消息,另一端要接收完整个消息才能响应它。 【2】客户端用一个单独的数据包将查询传给服务器,这也是为什么查询的语句很长的时候,参数 max_allowed_packet 就特别重要了。...的优化器认为大概需要 1030个数据页的随机查找才能完成上述的查询。...MySQL 层面并不知道哪些页面在内存、哪些磁盘上,所以查询实际执行过程到底需要多少次物理 I/O 是无法得知的。...MySQL 根据执行计划给出的指令逐步执行根据执行计划逐步执行的过程,有大量的操作需要通过调用存储引擎实现的接口来完成,这些接口也就是我们称为 “handler API” 的接口。

2.2K30

MySql基础架构(sql查询语句MySql内部具体是怎么执行的?)

于是开始了深入学习mysql。本篇文章通过 一条sql查询语句mysql数据库具体是怎么执行的? 来具体讲解mysql的基础架构。...讲解 mysql> select * from Student where ID=1; 上面一条简单查询语句很简单,但我想好多开发者并不知道MYSQL内部的执行过程。...较好的连接方式长连接产生的问题以及解决办法: 全部使用长连接后,你可能会发现,有些时候 MySQL 占用内存涨得特别快,这是因为 MySQL 执行过程临时使用的内存是管理连接对象里面的。...但是也不是不能使用,假如一张静态表(系统配置表),很长时间更新一次,这种情况就比较适合使用查询缓存。...分析器 如果在查询缓存未找到缓存数据,就会开始真正的执行查询语句。Mysql需要直到这条查询语句要做什么?因此需要对SQL语句做解析。

5.5K20
领券