我使用python3和sqlite3对大型表( DB中的1,1GB和这个表中的大约700万行)进行了相对简单的转换。其目的是将所有行中的两个字段与-1相乘。
我的疑问是
"UPDATE 'channel_data' SET
'x_uncompensated_m'=-1*'x_uncompensated_m',
'y_compensated_m'=-1*'y_compensated_m'"
更新似乎要花费很长时间,所以需要几分钟的时间。日志文件增长到540 MB,而原始数据库大约有1,1GB。有什么提示可以提高性能吗?
发布于 2019-11-19 09:40:42
你正在更新每一条记录。这太贵了。所有的操作都需要日志加锁和许多其他开销。
因此,并不真正建议更新每一行。
一种选择是“批次”更新--比如说,一次做10,000次。另一种方法是重新创建表:
create table temp_channel_data as
select . . ., -- all the other columns
-1*x_uncompensated_m as new_x,
-1*y_uncompensated_m as new_y
from channel_data;
然后以某种方式备份表(这样你就不会犯大错)。然后清空它然后重新填充它:
truncate table channel_data;
insert into channel_data ( . . . ) -- list the columns here
select . . . -- list the columns here
from temp_channel_data;
批量插入比更新快得多,因为它们不需要记录每一行。
https://stackoverflow.com/questions/58939663
复制