3

我有 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 分钟。这里存在另一种方式吗?谢谢。

PS 两个表中的所有列都有索引。

4

1 回答 1

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
    )
于 2012-07-09T22:42:28.300 回答