MySQL 原理与优化之Update 优化

yizhihongxing

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日

相关文章

  • MySQL创建存储过程(CREATE PROCEDURE)

    MySQL创建存储过程的方法: 在MySQL中创建存储过程需要使用CREATE PROCEDURE语句,并指定存储过程的名称; 设置存储过程的参数、返回值、执行体等信息; 使用END语句来结束存储过程。 MySQL创建存储过程的示例: 如下片段是创建一个简单的 MySQL 存储过程的示例: DELIMITER // CREATE PROCEDURE get_…

    MySQL 2023年3月10日
    00
  • mysql error 1130 hy000:Host’localhost’解决方案

    当你在使用MySQL时,可能会遇到“mysql error 1130 hy000: Host ‘localhost’”错误。这个错误通常意味着用户无法通过指定的主机名或IP地址访问MySQL服务器。接下来,我将提供解决此错误的完整攻略。 1. 确认用户名和密码 首先检查使用的用户名和密码是否正确。请尝试使用正确的用户名和密码进行登录,以验证是否出现此错误。可…

    MySQL 2023年5月18日
    00
  • mysql安全启动脚本mysqld_safe详细介绍

    MySQL安全启动脚本mysqld_safe详细介绍 简介 mysqld_safe是MySQL官方提供的安全启动脚本,用于启动MySQL在运行过程中的监控和异常处理。这个脚本可以让MySQL启动后自动进行PID文件检测,防止多次启动导致数据文件的损坏。 使用方法 mysqld_safe可以直接在终端中使用,并通过参数进行不同的配置,例如: $ mysqld_…

    MySQL 2023年5月18日
    00
  • mysql-作业

    一、表关系   请创建如下表,并创建相关约束                 班级表:class       学生表:student       cid caption grade_id   sid sname gender class_id 1 一年一班 1   1 乔丹 女 1 2 二年一班 2   2 艾弗森 女 1 3 三年二班 3   3 科比 男…

    MySQL 2023年4月13日
    00
  • MySQL修改用户(RENAME USER)

    MySQL是一款用于处理关系型数据库的开源软件。在MySQL中,我们通过“用户”来限制对于数据库的访问权限。在实际的工作中,由于各种原因,我们可能需要修改MySQL用户的账号名或密码等信息。本文将介绍如何在MySQL中修改用户的方法。 RENAME USER语法 MySQL提供了RENAME USER语句来修改用户的账号名。语句的一般语法如下: RENAME…

    MySQL 2023年3月10日
    00
  • mysql优化连接数防止访问量过高的方法

    MySQL 是一个非常流行的关系型数据库管理系统,它支持多个客户端连接到同一个数据库实例,因此在高访问量的情况下,优化 MySQL 连接数是一项非常重要的工作。以下是 MySQL 优化连接数防止访问量过高的方法的完整攻略: 1. 调整 MySQL 最大连接数限制 MySQL 的最大连接数对服务器承受高并发有着非常重要的影响,如果设置太小,可能导致访问量过高时…

    MySQL 2023年5月19日
    00
  • 索引在什么情况下不会被使用?

    索引是数据库中用于优化查询操作的一种手段。当我们执行查询操作时,MySQL会根据索引来执行查询,以提高查询的效率。但是,有些情况下索引可能不会被使用。下面详细说明。 不使用索引的查询 查询语句中使用的查询条件不是索引列时,索引就不会被使用。例如: SELECT * FROM user WHERE age=20; 如果user表中age列没有被索引,那么查询操…

    MySQL 2023年3月10日
    00
  • mysql中已经存在某个库中有大小写的表,将lower_case_table_names由0改为1对已经存在的表是否有影响?

    需求描述:   今天遇到了修改lower_case_table_names参数的问题,想了下,如果原来里面有表,表名有大小写的,   如果将lower_case_table_names从默认的0改为1之后,那么对于原来的表有没有影响.做个实验,在此   记录下. 操作过程: 1.原来未修改之前,库中创建大小写区分的表 mysql> drop datab…

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