慢的优化有多个层面的。
首先你得看你orderSn有没有加索引,没加索引的话每次都是全表扫描,数据越多执行sql越慢。
其次你虽然使用了事务统一提交,但是每次都是单条更新,考虑拼接成如下格式[SQL] 纯文本查看 复制代码 UPDATE data.accessdata
SET sczt = CASE orderSn
WHEN '573539694961564' THEN '1'
WHEN 'another_order' THEN '1'
...
END
WHERE orderSn IN ('573539694961564', 'another_order', ...);
通过[color=rgba(0, 0, 0, 0.9)]CASE WHEN合并多条更新为一条SQL
另外如果不考虑case when的话,一万次的提交会导致I/O压力和日志压力过大,换成每一千条提交一次。
延时就没必要加了,除非你自己有需要。
另外你说的每次更新都是重新获取一次数据库句柄,这个你的写法和你的描述没啥关系,没有在循环里每次都重新获取句柄,影响不大。你要是想连接复用的话就用数据库连接池。
补充内容 (2025-4-5 22:29):
易语言没有ORM框架,用的话就是字符串拼接sql,把n条更新sql合并为一条进行批量更新。避免全表扫描是数据库层面的事,连接池是管理、复用连接的事 |