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

如何快速更新百万行表的ID列 实现ZENDINGINHOUD新旧表合并

最优解决方案(完全避免旧表更新开销)

你的最终目的是将ZENDINGINHOUD_OLD的数据合并到ZENDINGINHOUD_NEW,完全不需要先更新旧表的ID,直接在插入时计算新ID即可,省掉全表更新的所有开销:

-- 注意把语句中的「其他字段」替换为你表中实际的字段列表
INSERT INTO ZENDINGINHOUD_NEW (ID, 其他字段1, 其他字段2, ...)
SELECT ID + 60780000, 其他字段1, 其他字段2, ...
FROM ZENDINGINHOUD_OLD

如果担心一次性插入百万条数据日志过大,可以改成分批插入:

WHILE 1=1
BEGIN
    INSERT TOP (10000) INTO ZENDINGINHOUD_NEW (ID, 其他字段1, 其他字段2, ...)
    SELECT ID + 60780000, 其他字段1, 其他字段2, ...
    FROM ZENDINGINHOUD_OLD old
    WHERE NOT EXISTS (
        SELECT 1 FROM ZENDINGINHOUD_NEW new 
        WHERE new.ID = old.ID + 60780000
    )
    IF @@ROWCOUNT = 0 BREAK
END

如果你确实需要更新旧表ID的场景

原全量更新慢的核心原因是ID是聚簇索引键,聚簇索引决定了数据的物理存储顺序,全量修改ID等于要重排整个表的物理存储,同时还要维护所有关联索引、生成大量事务日志,才会出现执行计划里的高额开销。可以用分批更新降低锁和日志压力:

WHILE 1=1
BEGIN
    UPDATE TOP (10000) ZENDINGINHOUD_OLD 
    SET ID = ID + 60780000
    -- 只过滤还未更新的旧ID,避免重复处理
    WHERE ID < 60780000
    IF @@ROWCOUNT = 0 BREAK
END

如果表上索引较多,也可以先临时删除ID列关联的所有索引,更新完成后再重建,效率会更高。

内容的提问来源于stack exchange,提问作者Mr.D

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:06:00