自学内容网 自学内容网

JAVA MySQL或SQLSERVER处理大量update语句优化

在 MySQL 或者SQLSERVER 中处理大量 UPDATE 语句时,性能优化是一个关键问题。应该尽量使用批量更新而不是逐行更新,以下是一些常见的批量处理方式或者手段,您可以选择其中0个或多个,可以帮助提高 UPDATE 操作的效率:

1、使用 CASE 语句进行批量更新

UPDATE your_table
SET column1 = CASE id
    WHEN 1 THEN 'value1'
    WHEN 2 THEN 'value2'
    -- 更多
END,
column2 = CASE id
    WHEN 1 THEN 'value3'
    WHEN 2 THEN 'value4'
    -- 更多
END
WHERE id IN (1, 2, ...);

2、使用 JOIN 进行批量更新

UPDATE your_table t
JOIN (
    SELECT id, new_value1, new_value2
    FROM some_other_table
) s ON t.id = s.id
SET t.column1 = s.new_value1,
t.column2 = s.new_value2;

3、使用临时表

-- 创建临时表
CREATE TEMPORARY TABLE temp_table AS
SELECT id, new_value1, new_value2
FROM some_other_table;

-- 更新主表
UPDATE your_table t
JOIN temp_table tmp ON t.id = tmp.id
SET t.column1 = tmp.new_value1,
t.column2 = tmp.new_value2;

4、分批更新

// 示例代码(Java)
int batchSize = 1000;
for (int i = 0; i < totalRows; i += batchSize) {
    int end = Math.min(i + batchSize, totalRows);
    String sql = "UPDATE your_table SET column1 = 'new_value' WHERE id BETWEEN ? AND ?";
    jdbcTemplate.update(sql, i, end - 1);
}

下面是一个拼接的例子:

    protected void batchUpdateJcbmxStatus(List<LeavwAssetsBadjustmx> mxList){
        StringBuffer sqlBuf=new StringBuffer();
        sqlBuf.append("UPDATE adjustmx \n");
        sqlBuf.append("SET mx_status = CASE id \n");
        for(LeavwAssetsBadjustmx mx:mxList){
            sqlBuf.append(" WHEN  "+mx.getId()+" THEN "+mx.getMxStatus() +" \n");
        }
        sqlBuf.append(" END,mx_status_msg= CASE id \n");
        for(LeavwAssetsBadjustmx mx:mxList){
            sqlBuf.append(" WHEN  "+mx.getId()+" THEN '"+mx.getMxStatusMsg()+"' \n");
        }
        sqlBuf.append(" END");
        sqlBuf.append(" WHERE id IN (");
        int index=0;
        for(LeavwAssetsBadjustmx mx:mxList){
            if(index++!=0) sqlBuf.append(",");
            sqlBuf.append(mx.getId());
        }
        sqlBuf.append(" )");
        log.info("sql:{}", sqlBuf.toString());
        adjustmxMapper.executeBathUpdateState(sqlBuf.toString());
    }


原文地址:https://blog.csdn.net/chengmin123456789/article/details/142492037

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!