负内连接[没有LEFT JOIN&一片空白]

时间:2012-07-09 04:20:56

标签: mysql inner-join

我有2个带有tth哈希的表,我需要得到哪些表,它们存在于第一个表中但不存在于第二个表中。 我会尝试这样的事情:

SELECT f.*
FROM files as f
LEFT JOIN trans as t ON t.tth=f.tth
WHERE t.id IS NULL

但它的工作速度非常慢,在第一个表65k行,第二个表有130k行,所以查询工作约5分钟。 这里存在另一种方式? 感谢。

P.S。两个表中的所有列都有索引。

1 个答案:

答案 0 :(得分:3)

谢谢,OMG Ponies,我读了一篇关于链接的文章,还有一个使用NOT IN的优化方法,查询率约为0.6秒。

    SELECT f.*
    FROM files as f
    WHERE 
    f.tth NOT IN (
      SELECT trans.tth
      FROM trans as t
-- We do not need to look entries across entire table, only from already matched, so create selection "limits" with INNER JOIN.
      INNER JOIN files ON files.tth=t.tth
    )