小编Joh*_*000的帖子

“NOT IN”的快速替代方案

我有一个表 A,它有一个名为 id 的字段,它是该表的主键。我还有一个名为 B 的表,它还有一个名为 id 的字段作为主键。

现在我想从表 A 中获取所有行,其中 id 值不作为任何表 B id 字段值中的值存在。

我的第一个查询是这样的:

SELECT a.id FROM a WHERE a.id NOT IN (SELECT DISTINCT b.id FROM b)
Run Code Online (Sandbox Code Playgroud)

然后我构建了一个看起来像这样的查询以提高速度:

SELECT a.id FROM a LEFT JOIN b ON a.id = b.id WHERE b.id IS NULL
Run Code Online (Sandbox Code Playgroud)

现在我在表 A 中得到 600k 行,在表 B 中得到 400k 行,并且事情变得非常缓慢。有没有更好的查询来运行这种操作,或者有没有更好的方法来解决这个问题?任何提示或指示?

mysql performance join select query-performance

5
推荐指数
1
解决办法
2340
查看次数

标签 统计

join ×1

mysql ×1

performance ×1

query-performance ×1

select ×1