You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效实现从id到uuid的数据库迁移?以charges表为例

高效将charges表的prev_charge_id转换为prev_charge_uuid的方法

我有一张名为charges的表,其中包含外键prev_charge_id。我们已新增prev_charge_id字段,现需将prev_charge_id转换为prev_charge_uuid,寻求高效实现方法。

当前表结构及数据

id name prev_charge_id prev_charge_uuid uuid
1  kv   null          null            abcd-abcd-abcd-abcd
2  Op   1             null            qbcd-aqcd-qbcd-qbcd

期望更新结果

id name prev_charge_id prev_charge_uuid     uuid
1  kv   null          null                  abcd-abcd-abcd-abcd
2  Op   1             abcd-abcd-abcd-abcd   qbcd-aqcd-qbcd-qbcd

高效实现方案

自连接批量更新SQL

通过自连接关联表内数据,一次性完成批量更新,避免逐行操作的低效:

MySQL/MariaDB

UPDATE charges t1
JOIN charges t2 ON t1.prev_charge_id = t2.id
SET t1.prev_charge_uuid = t2.uuid
WHERE t1.prev_charge_id IS NOT NULL;

PostgreSQL

UPDATE charges t1
SET prev_charge_uuid = t2.uuid
FROM charges t2
WHERE t1.prev_charge_id = t2.id
AND t1.prev_charge_id IS NOT NULL;

性能优化建议

  • 确保id为主键(默认带索引),同时给prev_charge_id添加索引,减少自连接时的全表扫描开销。
  • 若表数据量极大,可按id范围分批次执行更新,避免单次更新锁表时间过长影响业务。

内容的提问来源于stack exchange,提问作者Kunal Vashist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 11:15:36