我的流程中有一个查询,我在循环中执行数百次。
最初,表 A
包含所有记录(2000 万)。表B
包含 0 条记录。
两个表中的主键都是 ID
.
我执行的查询是:
select * from A where a.ID not in (select ID from b) limit 10000
##magic stuff in python
insert everything to table B, once again, .
最初查询运行得非常快,但是在第 N 个循环(第 100+)之后,表 B 的大小增加到执行 NOT IN
需要一些时间的程度。操作。
有人对如何加快查询速度有建议吗?
到目前为止,我已经将默认的 mysql bugger 调整为 1.5gbs(id 是非常小的 INT,所以这应该足够了)。
注意事项:
1) 一种方法是从表 A
中删除 *在我处理完它们之后。但是,我想保留表A
完好无损。
我能想到的唯一方法是向表 A
添加另一列(我索引的)称为 PROCESSED
,然后在处理/发布记录后使用第二个查询更新该列。但我希望有一个更简单的解决方案。
最佳答案
子查询与连接
select <column list>
from
A left join
B on a.id = b.id
where b.id is null
limit 10000
并将其包装到插入中
INSERT INTO b (<column list from B>)
select <column list from A>
from
A left join
B on a.id = b.id
where b.id is null
limit 10000
这样就可以了
关于mysql - 加快 SQL NOT IN 查询速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57733854/