sql 用 in 修改语句, 10000修改10次和10000条修改一次哪个效率更高?
一次修改10000条
update table set is_to_dd = '1' where number in ('1','2',',.,','10000');
10000条修改十次
update table set is_to_dd = '1' where number in ('1','2'',.,'1000');
.
update table set is_to_dd = '1' where number in ('9001','9002'',.,'10000');
数据量更大呢?比如修改100000条数据
对于mysql的话,还要看你的索引情况,简单没法比较出来
10000条数据可能在多个最小块上,那涉及到的块都要加载到内存才能修改,读取磁盘的次数也就是有多少块读多少次
如果分十次来修改那至少每次都要读取数据,IO次数不一定少
如果数据量很大,相应的读取磁盘IO次数也会增加,
一般情况下一次修改更快,能一条sql就尽量不要多条。
但是这个并不是绝对的,要根据具体情况说。
比如更新的数量比例超过1/3,不走索引有可能更慢。
而且在复杂更新中,更新数量和时间曲线增长。有一次更新,十多条数据要13秒,但是100条数据半个小时都更新不动。
而且像这种大型更新,如果没有业务要求的话,建议分开,长时间更新可能影响服务
一般都是合理使用索引,用一条语句修改的。