mysql - 加快 SQL NOT IN 查询速度

标签 mysql

我的流程中有一个查询,我在循环中执行数百次。

最初,表 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/

相关文章:

mysql - 在 hive/mysql 中实现 sum_reverse() [Explode table result]

MySQL 选择具有相同 FK 但在另一行中具有不同值的行

php - MySQL 从 3 个表中选择并获取所有成员(member)在特定日期的出勤时间

mysql - 使用 Mysql 数据库的 Ruby on Rails 项目

mysql - 你如何在mysql中结合内部和外部连接

mysql - Ruby on Rails SQL "SELECT"需要很长时间

mysql - 将 MySQL 键列转换为 FOREIGN 列后,站点速度变慢

php - 使用经纬度和 MySQL 查找最近的 10 个城市?

php - WHILE 中的 IF 语句 - PHP、MySQL 和 HTML 下拉选择

java - 从 microsoft azure mysql 恢复 mysql 数据