我有一个大表all_records,有1亿条记录和许多列。我希望根据多列的耗时操作将大约3000万条记录插入到另一个表records_not_used_now中(在下面的查询中,这些操作被命名为f(n) )。然后从原始表all_records中删除这些记录。
查询如下:
insert into records_not_used_now
select * from all_records where f(n) > 0;
delete from all_records where f(n) > 0;然而,由于f(n) >0的判断要花费计算时间,我不想做两次。MySQL中是否有任何查询可以从表中选择记录,然后同时删除它们?该查询有助于避免运行相同的判断和两次扫描表。
发布于 2021-05-03 05:20:37
根据您的解释,您正在将大约30M记录从表移动到另一个表,并且由于计算时间较长,您希望避免重复f(n) > 0计算作业。
我建议分四个具体步骤来完成这个任务。
创建临时表
CREATE TEMPORARY_TABLE TABLE IF NOT EXISTS table2 AS (select * from all_records where f(n) > 0;)之间的sql join删除源表(all_records)中的记录
INSERT INTO records_not_used_now SELECT * FROM TEMPORARY_TABLE;DROP TABLE TEMPORARY_TABLE ; 参考文献:
发布于 2021-05-03 05:18:31
创建名为f_on_n的新列并运行
UPDATE all_records set f_of_n = f(n);
insert into records_not_used_now select * from all_records where f_of_n > 0;
delete from all_records where f_of_n > 0;https://stackoverflow.com/questions/67363653
复制相似问题