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

为什么这个MYSQL更新查询需要2分钟才能运行?

这个MYSQL更新查询需要2分钟才能运行的原因可能有多种,以下是一些可能的原因和解决方法:

  1. 数据量过大:如果数据库表中的数据量非常大,更新查询可能需要更长的时间来处理。可以考虑优化查询语句,使用索引来加快查询速度,或者分批次更新数据。
  2. 查询条件复杂:如果更新查询的条件非常复杂,包含多个关联表或者大量的逻辑判断,会导致查询时间增加。可以尝试简化查询条件,优化查询语句,或者使用缓存来提高查询效率。
  3. 数据库性能问题:如果数据库服务器的性能较低,包括CPU、内存、磁盘等方面,会导致查询速度变慢。可以考虑优化数据库服务器的配置,增加硬件资源,或者使用更高性能的数据库服务器。
  4. 网络延迟:如果数据库服务器和应用服务器之间的网络延迟较高,会导致查询时间增加。可以考虑优化网络连接,减少网络延迟,或者将数据库服务器和应用服务器部署在同一局域网内。
  5. 锁竞争:如果更新查询需要锁定数据库表或者行,而其他查询或者事务正在竞争同样的锁,会导致查询时间增加。可以考虑优化事务隔离级别,减少锁竞争,或者使用乐观锁来避免锁竞争。
  6. 数据库索引问题:如果更新查询没有合适的索引,会导致查询时间增加。可以通过分析查询语句和数据访问模式,添加适当的索引来提高查询速度。
  7. 数据库统计信息不准确:如果数据库的统计信息不准确,会导致查询优化器做出错误的执行计划,从而影响查询性能。可以定期更新数据库的统计信息,或者手动指定查询执行计划。
  8. 数据库配置问题:如果数据库的配置参数不合理,会导致查询性能下降。可以通过调整数据库的配置参数,如缓冲区大小、并发连接数等,来提高查询速度。

以上是一些可能导致MYSQL更新查询需要较长时间运行的原因和解决方法。具体的解决方法需要根据实际情况进行分析和调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MySQL查询为什么选择使用这个索引?——基于MySQL 8.0.22索引成本计算

本文参考《MySQL是怎样运行的》,与书中不同的是,书中数据库版本5.7.22,本文使用8.0.22,不同版本数据库计算成本常数是不同的,书中是1W条记录,我这里是近10W条记录,经过实践,是对于书中的补充和验证...,计算的成本和实际成本对比,让大家更容易理解MySQL为什么要使用这个索引。...所以MySQL很粗暴的认为不管这个块有没有加载到内存中,使用的成本都是1.0。   至于为什么在8.0+ 版本中成本常数变小了呢?...因为mysql库相当重要,它存储了MySQL的用户账户和权限信息、一些存储过程和事件的定义信息、一些运行过程中产生的日志信息、一些帮助信息以及时区信息等等。...实际中,我们想分析MySQL为什么选择这个索引,直接如下例子,强制索引后分析成本,根本不用自己手动计算,本文是给大家分析,让大家理解思路。

67510

DBA:为什么你老写慢SQL

读操作我们下边会讲,这个分类里我们主要来看看写操作时为什么会导致 SQL 变慢。 刷脏页 脏页的定义是这样的:内存数据页和磁盘数据页不一致时,那么称这个内存数据页为脏页。...锁 写操作时 SQL 慢的另一种情况是可能遇到了锁,这个很容易理解。举个例子,你和别人合租了一间屋子,只有一个卫生间,你们俩同时都想去,但对方比你早了一丢丢。那么此时你只能等对方出来后才能进去。...通过在命令行执行图中的语句,可以查看当前运行的事务情况,这里介绍几个查询结果中重要的参数: ? 当前事务如果等待时间过长或出现死锁的情况,可以通过 「kill 线程ID」 的方式释放当前的锁。...遇到所要修改的数据行或表加了锁时,需要等待锁释放后才能进行后续操作,SQL 执行也会变慢。...另一种原因是在读操作时,要读入的数据页不在内存中,需要通过淘汰脏页才能申请新的数据页从而导致执行变慢。

90730

SQL:我为什么慢你心里没数吗?

读操作我们下边会讲,这个分类里我们主要来看看写操作时为什么会导致 SQL 变慢。 刷脏页 脏页的定义是这样的:内存数据页和磁盘数据页不一致时,那么称这个内存数据页为脏页。...锁 写操作时 SQL 慢的另一种情况是可能遇到了锁,这个很容易理解。举个例子,你和别人合租了一间屋子,只有一个卫生间,你们俩同时都想去,但对方比你早了一丢丢。那么此时你只能等对方出来后才能进去。...通过在命令行执行图中的语句,可以查看当前运行的事务情况,这里介绍几个查询结果中重要的参数: ? 当前事务如果等待时间过长或出现死锁的情况,可以通过 「kill 线程ID」 的方式释放当前的锁。...遇到所要修改的数据行或表加了锁时,需要等待锁释放后才能进行后续操作,SQL 执行也会变慢。...另一种原因是在读操作时,要读入的数据页不在内存中,需要通过淘汰脏页才能申请新的数据页从而导致执行变慢。

80210

2021必看!java电子书合集,值得收藏!

读操作我们下边会讲,这个分类里我们主要来看看写操作时为什么会导致 SQL 变慢。 刷脏页 脏页的定义是这样的:内存数据页和磁盘数据页不一致时,那么称这个内存数据页为脏页。...锁 写操作时 SQL 慢的另一种情况是可能遇到了锁,这个很容易理解。举个例子,你和别人合租了一间屋子,只有一个卫生间,你们俩同时都想去,但对方比你早了一丢丢。那么此时你只能等对方出来后才能进去。...对应到 Mysql 中,当某一条 SQL 所要更改的行刚好被加了锁,那么此时只有等锁释放了后才能进行后续操作。...Mysql 中提供了查看当前锁情况的方式: 通过在命令行执行图中的语句,可以查看当前运行的事务情况,这里介绍几个查询结果中重要的参数: 当前事务如果等待时间过长或出现死锁的情况,可以通过 「kill...默认情况下是关闭的,通过手动配置才能开启慢查询日志进行定位。

55120

并发锁 (三):myisam表锁

这个过程并不需要用户干预, 例如: select * from test limit 1 自动加共享锁,查询结束之后释放 再未查询成功之前,该表不允许执行更新操作: 测试案例 mysql终端1执行...这是因为MySQL认为写请求一般比读请求要重要。这也正是MyISAM表不太适合于有大量更新操作和查询操作应用的原因,因为,大量的更新操作会造成查询操作很难获得读锁,从而可能永远阻塞。...这里还要强调一点:一些需要长时间运行查询操作,也会使写进程“饿死”!...insert插入完毕,释放锁,才能继续查询 这时候就出现了2个问题: 1:语句1和语句2原本是同一个逻辑,统计2种金额的,却导致了语句2多统计了一条数据,导致金额合计不符合 2:语句2需要等待insert...插入完毕才能够继续执行,如果insert插入花费了10秒,那语句2也得等10秒之后才能查询 那该怎么解决呢?

1.4K20

面试系列-避免死锁

按理说业务开始是比较简单的,就是新增订单、修改订单、查询订单等操作,那为什么会出现死锁呢?经过日志分析,我们发现是作为幂等性校验的一张表经常出现死锁异常。...插入意向锁其实也是一种 gap 锁,它与 gap lock 是冲突的,所以当其它事务持有该间隙的 gap lock 时,需要等待其它事务释放 gap lock 之后,才能获取到插入意向锁。...如果使用辅助索引来更新数据库,就需要使用聚簇索引来更新数据库字段。如果两个更新事务使用了不同的辅助索引,或一个使用了辅助索引,一个使用了聚簇索引,就都有可能导致锁资源的循环等待。...我们还是以上面的这个订单记录表来重现下聚簇索引和辅助索引更新时,循环等待锁资源导致的死锁问题: 出现死锁的步骤: 综上可知,在更新操作时,我们应该尽量使用主键来更新表字段,这样可以有效避免一些不必要的死锁发生...我们只有先对 MySQL 的 InnoDB 存储引擎有足够的了解,才能剖析出造成死锁的具体原因。

47610

关于MDL

当你需要让整个库处于只读状态的时候,可以使用这个命令,之后其他线程的以下语句会被阻塞:数据更新语句(数据的增删改)、数据定义语句(包括建表、修改表结构等)和更新类事务的提交语句。...因此,如果有两个线程要同时给一个表加字段,其中一个要等另一个执行完才能开始执行。 读写锁之间互斥,这是要读写分离的一个理由。为什么要读写分离?...索引要根据表中的每一行的记录值来创建,所以需要全表扫描;加字段或修改字段,也要修改每一行记录中的对应列的数据,所以也要全表扫描 MySQL 不支持 DDL NOWAIT/WAIT n 这个语法。...MDL 会直到事务提交才释放,在做表结构变更的时候,你一定要小心不要导致锁住线上查询更新。...即使你没有显示的开启事务只是执行简单的查询语句,你也需要关注 autocommit 的值 使用事务需要小心,记得 commit,捕获异常 rollback,注意事务的使用范围 在DDL 操作前先检查一遍

72420

十几亿用户中心系统架构

这个非常不现实,因为会员系统直接影响全公司所有业务线的下单主流程,故障恢复的时间必须非常短,如果需要运维兄弟人工介入,那这个时间就太长了,是绝对不能容忍的。那ES的高可用如何做呢?...那为什么一到饭点就报警呢?因为流量比较大, 导致ES线程数飙高,cpu直往上窜,查询耗时增加,并传导给所有调用方,导致更大范围的延时。那么如何解决这个问题呢?...我们知道,ES操作数据是近实时的,往ES新增一个Document,此时立即去查,是查不到的,需要等待1秒后才能查询到。如下图所示: ES的近实时机制为什么会导致redis缓存数据不一致呢?...具体来讲,假设一个用户注销了自己的APP账号,此时需要更新ES,删除APP账号和微信账号的绑定关系。而ES的数据更新是近实时的,也就是说,1秒后你才能查询更新后的数据。...在逐步灰度流量的过程中,需要有验证机制,只有验证没问题了,才能进一步放大流量。那么这个验证机制如何实施呢?

99840

MySQL

意思就是说MyISAM在执行查询语句前,会自动给涉及的所有表加读锁,在执行更新语句(增删改操作)前,会自动给涉及的表加写锁,这个过程并不需要用户干预。   ...这就是MySQL认为写请求一般比读请求重要)   这就意味着,如果一个表上有很多更新操作,那么select语句将等待直到别的更新都结束后才能查到东西。...这也就是为什么MyISAM表不适合大量更新操作应用的原因,因为大量更新操作可能导致查询操作很难获得读锁,从而长久阻塞,致使程序响应超时。...查询哪些表正在被锁定: SHOW OPEN TABLES WHERE In_use > 0;   这个命令监控的是被表锁锁住的表,亲测如果用行锁,这个命令是没有反应的,真的得自己动手实践才能发现真相。...会话2的where条件也必须是索引,才能锁住这一行,否则会试图去锁整张表的数据,而整张表的数据已经有一行被会话1锁了,所以会话2锁不上。 为什么我要锁一行,MySQL给我锁全表?

1.8K10

关于MySQL的锁机制详解

意思就是说MyISAM在执行查询语句前,会自动给涉及的所有表加读锁,在执行更新语句(增删改操作)前,会自动给涉及的表加写锁,这个过程并不需要用户干预。   ...这就是MySQL认为写请求一般比读请求重要)   这就意味着,如果一个表上有很多更新操作,那么select语句将等待直到别的更新都结束后才能查到东西。...这也就是为什么MyISAM表不适合大量更新操作应用的原因,因为大量更新操作可能导致查询操作很难获得读锁,从而长久阻塞,致使程序响应超时。...查询哪些表正在被锁定:     SHOW OPEN TABLES WHERE In_use > 0;   这个命令监控的是被表锁锁住的表,亲测如果用行锁,这个命令是没有反应的,真的得自己动手实践才能发现真相...会话2的where条件也必须是索引,才能锁住这一行,否则会试图去锁整张表的数据,而整张表的数据已经有一行被会话1锁了,所以会话2锁不上。 为什么我要锁一行,MySQL给我锁全表?

50830

SQL 性能调优最佳实践!

SQL 服务器性能调优是一组过程,用于优化关系数据库中的查询以尽可能高效地运行,这可确保应用程序发出的 SQL 语句在尽可能快的时间内运行。...查询调优往往是加速SQL服务器性能最快的方式,甚至有些性能问题也只能通过查询调优来解决,专家认为,大多数性能问题都源于查询写得不好和索引效率低下。 2为什么 SQL 性能调优很重要?...SQL 性能调优在许多关系数据库中很重要,包括 MySQL 和 Microsoft SQL Server,它是提高数据检索速度、提高 SQL 查询性能和避免编码循环的有效且必要的技术。...保持环境更新 SQL Server 优化的主要最佳实践是使环境本身保持最新,更新到所用 SQL 的最新版本——无论是 MySQL、Microsoft SQL Server 还是其他环境——都可以利用与性能相关的新功能...这种情况需要反复试验才能找到最佳解决方案,这就是为什么这个过程最好留给自动化。 4.

90920

从另外一个角度看什么是数据库

「索引」仅仅帮助你快速找到数据的标识,辅之以「数据规律的存储」,才能「减少磁盘 IO」,才能「加速查询」: 索引 + 规律存储 = 快速查询 不过对于 Mysql 来说,它的规律存储,是通过「聚簇索引」...选择哪个中间件,取决于你的使用场景;而选择哪种数据库,则取决于你对数据的使用场景: 如果你需要数据安全可靠,最好是用 Mysql 这样的关系型数据库; 如果你只是缓存一些临时数据,需要快速查询,不妨用...如何学习一个数据库 接上面一节给数据库下的定义,我尝试给数据库学习分三个层级: 接触:了解这个数据库的使用场景,为什么需要它,在什么场合下使用它 使用:如何通过这个数据库操控数据,了解它的 API/Command...随便找几个数据库验证上面的学习模型: Zookeeper: 为什么需要 Zookeeper? 如何往 ZK 里插入数据、查找数据、更新数据 …… ZK 是如何存储数据、如何查找数据的?...为什么可以那么快找到数据?Redis 的分片和主从是如何实现的? ? Elasticsearch: 为什么需要 Elasticsearch ?什么情况下需要用到搜索引擎?

44910

一条SQL更新语句是如何执行的?

为什么需要?有哪些我们需要掌握的细节? MySQL的三种日志文件redo日志、undo日志、binlog分别是什么?为什么需要这么多种类型的日志? 正文开始!...那么MySQL更新流程和查询流程有什么区别呢? 其实基本的流程是一致的,也要经过处理连接、解析优化、存储引擎几个步骤。主要区别在更新操作涉及到了MySQL更多的细节。...为什么这个大小是固定的呢?因为如果我们要使用顺序I/O,就必须在申请磁盘空间的时候一次性决定申请的空间大小,这样才能保证申请的磁盘空间在地址上的连续性。...6.1 为什么有了redo日志还需要 binlog? 我想你可能会问出这个问题,实际上,更准确的问法是为什么有了binlog还需要有redo日志?主要有以下几个原因。...参考资料 MySQL实战45讲 MySQL是怎样运行

53620

十几亿用户中心系统架构,落地实践!

这个非常不现实,因为会员系统直接影响全公司所有业务线的下单主流程,故障恢复的时间必须非常短,如果需要运维兄弟人工介入,那这个时间就太长了,是绝对不能容忍的。那ES的高可用如何做呢?...那为什么一到饭点就报警呢?因为流量比较大, 导致ES线程数飙高,cpu直往上窜,查询耗时增加,并传导给所有调用方,导致更大范围的延时。那么如何解决这个问题呢?...我们知道,ES操作数据是近实时的,往ES新增一个Document,此时立即去查,是查不到的,需要等待1秒后才能查询到。如下图所示: ES的近实时机制为什么会导致redis缓存数据不一致呢?...具体来讲,假设一个用户注销了自己的APP账号,此时需要更新ES,删除APP账号和微信账号的绑定关系。而ES的数据更新是近实时的,也就是说,1秒后你才能查询更新后的数据。...在逐步灰度流量的过程中,需要有验证机制,只有验证没问题了,才能进一步放大流量。那么这个验证机制如何实施呢?

52530

MySQL查漏补缺

查漏补缺 目录 MySQL查漏补缺 唯一索引比普通索引快吗, 为什么 MySQL由哪些部分组成, 分别用来做什么 MySQL查询缓存有什么弊端, 应该什么情况下使用, 8.0版本对查询缓存有什么变更....更新时, 这个情况就比较复杂了. 普通索引将记录放到change buffer中语句就执行完毕了....MySQL查询缓存有什么弊端, 应该什么情况下使用, 8.0版本对查询缓存有什么变更. 查询缓存可能会失效非常频繁, 对于一个表, 只要有更新, 该表的全部查询缓存都会被清空....当出现读写锁冲突的时候, 后访问的事务必须等前一个事务执行完成才能继续执行. 做过哪些MySQL索引相关优化 尽量使用主键查询: 聚簇索引上存储了全部数据, 相比普通索引查询, 减少了回表的消耗....通常需要为表加上一个列, 以存储各个实例的惟一标识. 这个惟一属性列被称为主关键字或主键. 第三范式: 在二范式的基础上, 要求一个数据库表中不包含已在其它表中已包含的非主关键字信息.

2.3K20

数据库并发处理 - 上的一把好锁

执行 FTWRL 命令之后由于客户端发生异常断开,那么 MySQL 会自动释放这个全局锁,整个库回到可以正常更新的状态。...为什么要有 MDL? MDL 保证的就是读写的正确性,比如在查询一个中的数据时,此时另一个线程改变了表结构,查询的结果和表结构不一致肯定不行。...这时如果在这张表上的查询语句很频繁,而且客户端有重连机制,在超时后会再起一个新 session 请求,这个库的线程就很快会爆满了。...如果想对某个表进行 DDL 的操作时,可以先查询下是否有长事务的运行(information_schema 下的 innodb_trx 表),可以先 kill 这个事务,然后做 DDL 操作。...在事务 A 的两条语句更新后,事务 B 更新操作会被阻塞。直到事务 A 中执行 commit 操作后才能执行。

1.3K30

MySQL的万字总结(缓存,索引,Explain,事务,redo日志等)

原理 MYSQL查询缓存实质上是缓存SQL的hash值和该SQL的查询结果,如果运行相同的SQL,服务器直接从缓存中去掉结果,而不再去解析,优化,寻找最低成本的执行计划等一系列操作,大大提升了查询速度...在修改表的内容时,索引必须进行更新,有时可能需要重构,因此,索引越多,所花的时间越长。...PART 5 Explain 产品来索命 产品:为什么这个页面出来这么慢? 开发:因为你查的数据多呗,他就是这么慢 产品:我不管,我要这个页面快点,你这样,客户怎么用啊 开发:。。。。。。。...哈哈哈哈,不瞎BB啦,如果有些SQL贼慢,我们需要知道他有没有走索引,走了哪个索引,这个时候我就需要通过explain关键字来深入了解MySQL内部是如何执行的。 ?...参考文献 【原创】面试官:讲讲mysql表设计要注意啥 【原创】杂谈自增主键用完了怎么办 MySQL 是怎样运行的:从根儿上理解 MySQL 详细分析MySQL事务日志(redo log和undo log

71110

鹅厂 TDSQL XA 事务隔离级别的奥秘

全局可串行化 为什么本地事务以serializable隔离级别运行就可以确保全局事务的serializable隔离级别?...由于T11与T21并发更新同一行,如果T11先更新,那么T11会拿到pk=1的那行(标注为R1)的事务锁直到GT1结束提交才释放,然后T21才能拿到R1的行事务锁开始执行,然后T22执行。...也就是说,运行在每个MySQL实例上的事务锁调度机制可以确保全局事务的串行执行。 我们可以得出这个推论:全局事务的本地事务分支的依赖关系也是全局事务的依赖关系。这里的依赖关系就是事务锁的等待关系。...同时,由于mysql innodb使用MVCC做select(除了serializable和for update/lock in share mode子句),还需要这个全局事务id给予innodb做事务...这样的话,GT1的这个select语句就会查询到GT2的T21的更新,而GT2还没有提交完成因为GT2的T22还未完成提交,所以GT1的这个select语句不包含GT2的T22的更新

1.9K20

执行一条sql都经历了什么?

注意在 mysql8 后已经没有查询缓存这个功能了,因为这个缓存非常容易被清空掉,命中率比较低。...只要对表有一个更新这个表上的所有缓存就会被清空,因此你刚缓存下来的内容,还没来得及用就被另一个更新给清空了。...分析器 既然没有查到缓存,就需要开始执行 sql 语句了,在执行之前肯定需要先对 sql 语句进行解析。...这些方案的执行结果都一样,但是执行效率不一样,所以 mysql 在执行之前需要尝试找出一个最优的方案来,这就是优化器的主要工作。...这里你可能会问,为什么不在连接器中就直接判断权限呢,这里我觉得可能是因为 mysql查询的表并不一定仅限于 sql 语句中字面上的那些表,有的时候可能需要经过分析器和优化器之后才能确定到底要怎么执行

52450
领券