MySQL:快速查找另一个表中没有相应行的行

Mat*_*att 4 mysql performance

我在MySQL中有两个相关的表.我想在表A中找到没有相应行表B的行.这里的手册和其他线程推荐这样做:

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

但是,这很慢.在我的例子中,表A的行少于5000行,表B的行数约为40000,但此查询最多需要8分钟.

有谁知道如何更快地实现这一目标?

非常感谢,亚光

编辑:索引是问题.创建一个后,查询将在10微秒内运行.

zer*_*kms 5

  1. a_idb表中的索引覆盖字段
  2. 替换WHERE b.id IS NULLWHERE b.a_id IS NULL