首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否同时进行插入和删除?

问是否同时进行插入和删除?
EN

Stack Overflow用户
提问于 2021-05-03 04:55:08
回答 2查看 691关注 0票数 1

我有一个大表all_records,有1亿条记录和许多列。我希望根据多列的耗时操作将大约3000万条记录插入到另一个表records_not_used_now中(在下面的查询中,这些操作被命名为f(n) )。然后从原始表all_records中删除这些记录。

查询如下:

代码语言:javascript
复制
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中是否有任何查询可以从表中选择记录,然后同时删除它们?该查询有助于避免运行相同的判断和两次扫描表。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-03 05:20:37

根据您的解释,您正在将大约30M记录从表移动到另一个表,并且由于计算时间较长,您希望避免重复f(n) > 0计算作业。

我建议分四个具体步骤来完成这个任务。

  1. 使用select查询.

创建临时表

代码语言:javascript
复制
CREATE TEMPORARY_TABLE TABLE IF NOT EXISTS table2 AS (select * from all_records  where f(n) > 0;)

  1. 使用新的临时表和源表

之间的sql join删除源表(all_records)中的记录

  1. 将临时表中的所有记录插入到目标表.

代码语言:javascript
复制
INSERT INTO records_not_used_now SELECT * FROM TEMPORARY_TABLE;

  1. 删除临时表

代码语言:javascript
复制
DROP TABLE TEMPORARY_TABLE ; 

参考文献:

票数 1
EN

Stack Overflow用户

发布于 2021-05-03 05:18:31

创建名为f_on_n的新列并运行

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67363653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档