0

これを行う適切な方法がよくわかりません。基本的に2つのテーブルがあります。どちらのテーブルも同じ構造です。Database1(現在のデータの平均は2万行)、Database2(データの蓄積、任意の時点で100万行を超える可能性があります)。

両方のテーブルを比較して、特定のタイムスタンプクエリを使用してDatabase2に存在しないDatabase1の結果を取得したいと思います。私が持っていて試したもので、クエリは検索に時間がかかりすぎます。

試した:

select distinct player from Database1
where not exists (select player from Database2 where snap = 1340981695)

SELECT Database1.player FROM Database1
INNER JOIN Database2 ON Database1.player NOT IN (Database2.player) AND Database2.snap = 1340981695
GROUP BY Database1.player

select distinct Database1.player from Database1
left join Database2 on Database1.player not in (Database2.player)
and Database2.snap = 1340981695

私はまだこれに頭を巻くことができません。助けてくれてありがとう。

4

1 に答える 1

2

3つのアプローチがあります。パフォーマンスのおおよその順序で、最高から最低まで:

  1. 外部結合を使用します。

    SELECT Database1.*
    FROM   Database1
      LEFT JOIN Database2
             ON Database1.id = Database2.id AND Database2.snap = 1340981695
    WHERE  Database2.id IS NULL
    
  2. 使用IN

    SELECT *
    FROM   Database1
    WHERE  id NOT IN (SELECT id FROM Database2 WHERE snap = 1340981695)
    
  3. 使用EXISTS

    SELECT *
    FROM   Database1
    WHERE  NOT EXISTS (
             SELECT *
             FROM   Database2
             WHERE id = Database1.id AND snap = 1340981695
           )
    
于 2012-07-01T09:00:02.340 に答える