MySQL 原理与优化之Update 优化

MySQL 原理与优化之Update 优化攻略

Update 的基本语法

UPDATE table_name SET column1=value1, column2=value2,... WHERE some_column=some_value;

Update 语句的执行过程

  1. 执行查询操作:选择更新记录,并进行行锁定
  2. 根据 SET 子句中的值更新相应列
  3. 提交更改并释放行锁定

Update 语句的优化

在大型数据库系统中,Update 语句的优化是非常重要的,因为它们通常需要对数百万行进行操作,而且这些操作还需要用到磁盘 I/O 操作,因此对 Update 语句进行优化可以大大提高 MySQL 数据库的性能。

以下是 Update 语句的常用优化方法:

尽可能少的更新列

Update 语句涉及到的列越多,所需更新的数据就越多,由此更新所使用的时间也就越长。因此,尽可能少地更新列通常是 Update 语句的一个优化策略。

比如,我们可以将只需要更新的列放在 SET 子句中,而不管其他列,例如:

UPDATE table_name SET column1=value1, column2=value2 WHERE some_column=some_value;

确定 WHERE 子句的索引字段

WHERE 子句中的条件字段必须创建索引以加速优化,否则将会导致查询变慢。最好的方案是创建一个基于搜索条件的联合索引。

分段更新

分段更新是将大 SQL 分成更小的、可执行的部分,因此每个部分都比整个查询更快。

例如,我们可以将一个大的 Update 查询分解为多个较小的 Update 查询,每个查询更新一段数据。比如,我们可以按照 ID 范围分别进行更新,例如:

UPDATE table_name SET column1=value1 WHERE id >= 1 AND id <=1000;
UPDATE table_name SET column1=value1 WHERE id >= 1001 AND id <=2000;

移除触发器

当我们更新一张表时,如果有触发器,也会触发触发器相关的事件,从而增加了查询的执行时间。因此,为了提高 Update 查询性能,我们可以移除相关的触发器,然后再执行更新操作。

使用事务性 Update 查询

事务性 Update 查询可以大大提高 Update 查询的性能。当我们在执行一个大型 Update 查询时,为了避免数据丢失或数据不一致的情况,我们可以将查询放在一个事务中执行,并将其提交,而不是逐个提交。

示例1

更新爱好为“篮球”的用户的地址,只更新city字段:

UPDATE user SET city='北京' WHERE hobby='篮球';

优化:

直接用EXPLAIN查看:

EXPLAIN UPDATE user SET city='北京' WHERE hobby='篮球';

结果:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE user ref hobby hobby 40 const 2 Using where
其中,type 为 ref,说明该查询使用了基于索引的搜索条件。

示例2

将 a 表的字段 b 的大小加1,并将该表的所有行的 c 字段的值替换为 10:

UPDATE a SET b=b+1, c=10;

优化:

分段更新:

UPDATE a SET b=b+1 WHERE id >= 1 AND id <=1000;
UPDATE a SET b=b+1 WHERE id >= 1001 AND id <=2000;
......
UPDATE a SET c=10 WHERE id >= 1 AND id <=1000;
UPDATE a SET c=10 WHERE id >= 1001 AND id <=2000;
......

这样将大SQL拆分为多个小SQL,可以有效提高更新性能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL 原理与优化之Update 优化 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • SQLyog安装使用教程:SQLyog13连接MySQL8.0出现2058错误解决方法

    SQLyog是一款流行的图形化MySQL客户端,提供了方便的数据库管理界面。本文将详细讲解SQLyog的安装和使用方法,并介绍连接MySQL8.0时出现的2058错误的具体解决方法。 安装SQLyog 访问SQLyog官网(https://www.webyog.com/product/sqlyog)下载SQLyog软件安装包。 双击安装包进行安装,按照提示进…

    MySQL 2023年5月18日
    00
  • MySQL错误“Specified key was too long; max key length is 1000 bytes”的解决办法

    当在MySQL中使用utf8mb4编码时,创建表时如果设置了长度大于3072个字符的唯一索引或主键,就会出现“Specified key was too long; max key length is 1000 bytes”这个错误。这是因为utf8mb4编码的一个字符最多占用4个字节,而MySQL中InnoDB引擎默认索引最大长度为1000个字节。 针对这…

    MySQL 2023年5月18日
    00
  • 详解MySQL多表关联更新

    MySQL多表关联更新,是指在多个表之间建立关联关系,并在其中一个表中更新与另一个表相关的数据。例如,我们有两个表:用户表(users)和订单表(orders)。用户表中存储了用户的基本信息,订单表中存储了用户的订单信息(比如订单编号、用户ID、订单金额等)。如果我们要更新用户表中的数据(比如用户的名字),同时更新相关订单表中的数据(比如订单中的用户姓名需要…

    MySQL 2023年3月10日
    00
  • 读SQL进阶教程笔记12_地址与三值逻辑

    1. SQL和数据库都在极力提升数据在表现层的抽象度,以及对用户隐藏物理层的概念 2. 关系模型是为摆脱地址而生的 2.1. “地址”不仅包括指针操作的地址,还包括数组下标等 3. 一个优雅的数据结构胜过一百行杂耍般的代码 3.1. 精巧的数据结构搭配笨拙的代码,远远好过笨拙的数据结构搭配精巧的代码 4. 编程中泛滥的地址 4.1. 我们可以使用的只有冯·诺…

    MySQL 2023年4月19日
    00
  • 一文了解MySQL中的多版本并发控制

    作者:京东零售  李泽阳 最近在阅读《认知觉醒》这本书,里面有句话非常打动我:通过自己的语言,用最简单的话把一件事情讲清楚,最好让外行人也能听懂。 也许这就是大道至简,只是我们习惯了烦琐和复杂。 希望借助今天这篇文章,能用大白话说清楚这个相对比较底层和复杂的MVCC机制。 在开始之前,先抛出一个问题:我们都知道,目前(MySQL 5.6以上)数据库已普遍使用…

    MySQL 2023年4月17日
    00
  • 2023云数据库技术沙龙MySQL x ClickHouse专场成功举办

    4月22日,2023首届云数据库技术沙龙 MySQL x ClickHouse 专场,在杭州市海智中心成功举办。本次沙龙由玖章算术、菜根发展、良仓太炎共创联合主办。围绕“技术进化,让数据更智能”为主题,汇聚字节跳动、阿里云、玖章算术、华为云、腾讯云、百度的6位数据库领域专家,深入 MySQL x ClickHouse 的实践经验和技术趋势,结合企业级的真实场…

    MySQL 2023年4月25日
    00
  • 使用MySQL的Explain执行计划的方法(SQL性能调优)

    当我们需要分析优化SQL语句的性能时,可以使用MySQL自带的Explain执行计划工具来帮助我们解决问题。以下是使用MySQL的Explain执行计划的方法的详细攻略: 一、准备工作在执行Explain命令之前,我们需要先开启MySQL的查询日志功能。可以通过以下命令开启查询日志: SET global general_log = 1; SET globa…

    MySQL 2023年5月19日
    00
  • window下mysql 8.0.15 winx64安装配置方法图文教程

    下面进行详细讲解。首先,我们需要明确一下安装mysql 8.0.15的前置条件:需要先安装Visual C++ Redistributable for Visual Studio 2015。 1. 下载并安装Visual C++ Redistributable for Visual Studio 2015 首先,打开Visual C++ Redistribu…

    MySQL 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部