MySQL当表中新增加字段的时候,如何将该字段的值进行快速刷新成对应的值

2024-08-26 18:52

本文主要是介绍MySQL当表中新增加字段的时候,如何将该字段的值进行快速刷新成对应的值,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景

我有两个表,表usde_credits(积分表)和表usde_user(用户表),现在需要在usde_credits表中新增加一个user_id的字段,这个字段的值对应的就是usde_user表中的user_id的值,加上字段后,还需要将对应的值刷新到字段中。这两个表之间的关系目前是通过wallet_address来关联的。

解决

因为我有很多的表都需要增加这个字段,而且好友好几套环境的数据,并且目前使用的人很少,所以我不想通过写程序去批量更新,因为还要写代码(🥹)。所以想着通过SQL去快速处理。于是我写了如下的SQL:

UPDATE usde_credits uc
JOIN usde_user uu ON uc.wallet_address = uu.wallet_address
SET uc.user_id = uu.user_id
WHERE uc.user_id IS NULL;

但是我发现这样执行很慢,因为我的表中我查询了下有80多万条数据,而且我的MySQL服务器的性能并不是很好,虽然关联条件我加了索引,但是还是很慢,于是想到了以下几种办法:

  1. 分批更新

    UPDATE usde_credits uc
    JOIN usde_user uu ON uc.wallet_address = uu.wallet_address
    SET uc.user_id = uu.user_id
    WHERE uc.user_id IS NULL AND uc.id BETWEEN ? AND ?;
    
  2. 限制每次更新的数量

    UPDATE usde_credits uc
    JOIN usde_user uu ON uc.wallet_address = uu.wallet_address
    SET uc.user_id = uu.user_id
    WHERE uc.user_id IS NULL
    LIMIT 10000;
    
  3. 使用临时表或者视图

    CREATE TEMPORARY TABLE temp_update AS
    SELECT uc.id, uu.user_id
    FROM usde_credits uc
    JOIN usde_user uu ON uc.wallet_address = uu.wallet_address
    WHERE uc.user_id IS NULL;UPDATE usde_credits uc
    JOIN temp_update tu ON uc.id = tu.id
    SET uc.user_id = tu.user_id;
    

我直接选择了第三种,使用临时表的办法。
针对这种情况创建临时表相比其它两个办法是有优点的。当你直接更新主表时,尤其是涉及大量数据更新时,主表可能会被锁定较长时间,影响其他查询或更新操作。通过先创建临时表进行数据准备,再更新主表,可以减少主表的锁定时间。而且还能减少对主表的多次扫描操作。
而且前两种办法还是需要人工更改数量啊😓。

通过以上的SQL,创建临时表很快,大几秒钟就能完成了,而更新的操作,虽然经历了1分多钟,对于我的MySQL的配置,服务器的配置,已经完全能接受了,已经很快了。

注意事项
当然使用临时表也还是有一些需要注意的问题:

  • 如果临时表的数据量很大,创建和操作临时表本身也会消耗资源,因此在表的大小和系统资源允许的情况下使用。
  • 给临时表上的关键字段创建索引,还可以进一步提升操作速度
  • 临时表是会话范围的,在当前数据库连接关闭后会自动删除,适合一次性的批量操作。

这篇关于MySQL当表中新增加字段的时候,如何将该字段的值进行快速刷新成对应的值的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1109392

相关文章

MySQL数据库约束深入详解

《MySQL数据库约束深入详解》:本文主要介绍MySQL数据库约束,在MySQL数据库中,约束是用来限制进入表中的数据类型的一种技术,通过使用约束,可以确保数据的准确性、完整性和可靠性,需要的朋友... 目录一、数据库约束的概念二、约束类型三、NOT NULL 非空约束四、DEFAULT 默认值约束五、UN

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

MySQL 多表连接操作方法(INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN)

《MySQL多表连接操作方法(INNERJOIN、LEFTJOIN、RIGHTJOIN、FULLOUTERJOIN)》多表连接是一种将两个或多个表中的数据组合在一起的SQL操作,通过连接,... 目录一、 什么是多表连接?二、 mysql 支持的连接类型三、 多表连接的语法四、实战示例 数据准备五、连接的性

MySQL中的分组和多表连接详解

《MySQL中的分组和多表连接详解》:本文主要介绍MySQL中的分组和多表连接的相关操作,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录mysql中的分组和多表连接一、MySQL的分组(group javascriptby )二、多表连接(表连接会产生大量的数据垃圾)MySQL中的

利用python实现对excel文件进行加密

《利用python实现对excel文件进行加密》由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,本文将以Python语言为例,和大家讲讲如何对Excel文件进行加密,感兴... 目录前言方法一:使用pywin32库(仅限Windows)方法二:使用msoffcrypto-too

快速修复一个Panic的Linux内核的技巧

《快速修复一个Panic的Linux内核的技巧》Linux系统中运行了不当的mkinitcpio操作导致内核文件不能正常工作,重启的时候,内核启动中止于Panic状态,该怎么解决这个问题呢?下面我们就... 感谢China编程(www.chinasem.cn)网友 鸢一雨音 的投稿写这篇文章是有原因的。为了配置完

MySQL 中的 JSON 查询案例详解

《MySQL中的JSON查询案例详解》:本文主要介绍MySQL的JSON查询的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 的 jsON 路径格式基本结构路径组件详解特殊语法元素实际示例简单路径复杂路径简写操作符注意MySQL 的 J

Pandas使用AdaBoost进行分类的实现

《Pandas使用AdaBoost进行分类的实现》Pandas和AdaBoost分类算法,可以高效地进行数据预处理和分类任务,本文主要介绍了Pandas使用AdaBoost进行分类的实现,具有一定的参... 目录什么是 AdaBoost?使用 AdaBoost 的步骤安装必要的库步骤一:数据准备步骤二:模型

使用Pandas进行均值填充的实现

《使用Pandas进行均值填充的实现》缺失数据(NaN值)是一个常见的问题,我们可以通过多种方法来处理缺失数据,其中一种常用的方法是均值填充,本文主要介绍了使用Pandas进行均值填充的实现,感兴趣的... 目录什么是均值填充?为什么选择均值填充?均值填充的步骤实际代码示例总结在数据分析和处理过程中,缺失数

Windows 上如果忘记了 MySQL 密码 重置密码的两种方法

《Windows上如果忘记了MySQL密码重置密码的两种方法》:本文主要介绍Windows上如果忘记了MySQL密码重置密码的两种方法,本文通过两种方法结合实例代码给大家介绍的非常详细,感... 目录方法 1:以跳过权限验证模式启动 mysql 并重置密码方法 2:使用 my.ini 文件的临时配置在 Wi