2017-06-14 1 views
1

私は200k行以上の2つのテーブルを持っています。私は彼らがどの線であるのか把握しようとしています。そして、各テーブルは異なるデータベースにあります。 MySQLでどうしたらいいですか?MySQLの異なるデータベースの別のテーブルと比較して、テーブルから欠落した行を取得するにはどうすればよいですか?

SELECT t1.* 
FROM db1.tb1 t1 
LEFT JOIN db2.tb2 ON tb1.col_13 = tb2.col_13 
WHERE tb2.col_13 IS NULL; 

が、それはFOREVER取っている:

は、私はこれを試してみました。

EDIT

col_13は、この文句を言わない仕事すべての重複ですので。 問題は私がテーブル間のcommenプライマリキーを見つけることはできません、それらの間のプライマリキーはdatetimeですが、ほぼ同じですが、各テーブルにデータを挿入するために使用される異なるスクリプトのため、たとえば、「2015-09-01 00:00:11」と「2015-09-01 00:00:12」は同じ行ですが、丸めのために秒が異なります。

+3

私はこれがうまくいくと思いますが、それ以上の時間を要する場合は、より多くの参加と条件に拡張したいと思うかもしれません。 col_13に重複がある場合、これはそれらのすべての1つに参加する予定です。たとえば、両方のテーブルに重複した値がある場合、異なる組み合わせから4つの結果行が得られます –

+0

プライマリキー列に結合することをお勧めします.1つは一意のID、タイムスタンプ、または等価で埋められます。 –

+0

問題はcol_13がすべて重複していることです。その理由は長い時間がかかり、動作しません。問題は丸めのために共有する列(datetime)が時々differnetであることです。 1つは時間として00:01:12を持ち、もう1つは時間として00:01:11を持ちます。しかし、彼らは同じでなければなりません。どうすればこの問題を解決できますか? –

答えて

1

イーストンのコメントは正しいですか?クエリを適切に実行しています。あなたの問題は、2つのデータベースに参加するのではなく、クエリのパフォーマンスに関係します。この問題を解決するには、テーブル構造の詳細が必要になります。彼の提案は良い出発点です。つまり、両方のデータベースで一意で索引付けされている列を確実に結合してください。これにより、クエリはできるだけ迅速に実行されます。

あなた自身で問題を簡単に解決できない場合は、新しい質問をして、今度はテーブル構造の詳細についてのパフォーマンスに焦点を当てることをおすすめします。

1

クエリがバングオンに見えるので、これはほんの数秒かかります。そのため、col_13にインデックスを追加する必要があります。これは必要ないかもしれないが、頻繁に実行される場合はインデックスを追加します。

関連する問題