3

t番目のハッシュを持つ2つのテーブルがあり、最初のテーブルには存在するが2番目のテーブルには存在しないテーブルを取得する必要があります。私はこのようなことを試みます:

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

ただし、最初のテーブルは65k行、2番目のテーブルは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 に答える