我有 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 两个表中的所有列都有索引。
我有 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 两个表中的所有列都有索引。
谢谢,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
)