2016-07-11 9 views
1

別のテーブルにないテーブルからデータを検索しようとしています。左結合を最適化する

私はさまざまなソリューションを使用しようとしましたが、私の問題は常にパフォーマンスです(table_aには100,000行あり、table_bには580万行あります)。

これを行うには高速かつ有効な方法がありますか?事前に

おかげで...あなたは(必ずしもではない)、より効率的かもしれ本のNOT EXISTS()バージョンを使用して試すことができます

SELECT 
    * 
FROM 
    table_a a 
LEFT JOIN 
    table_b b ON b.field_one = a.field_one 
WHERE 1 
    AND b.id IS NULL 
+0

2つのテーブルにインデックスを設定できます。これにより、結合のパフォーマンスが向上します。あなたはこれをしましたか? –

+1

両方のテーブルの 'create table'ステートメントを表示してください – Alex

+1

決して*を使用しないでください。この場合、テーブルbにデータがなく、カラムを返すので、多くの不要なカラムを追加しています。それはリソースを使い果たします。 SELECT *はSQLの反パターンであり、本番用のコードでは使用しないでください。 – HLGEM

答えて

2

SELECT * FROM Table_a a 
WHERE NOT EXISTS(SELECT 1 FROM Table_b b 
       WHERE a.field_old = b.field_one) 

あなたはまた、追加することを検討すべきです(まだ持っていない場合)テーブルのインデックス:

Table_a(Field_one) 
Table_b(Field_one) 

Unlesそれらのテーブルは実際には幅が広く(列が多い)、この量のデータは正しいインデックスを持ち、それほど長くはならないはずです。

関連する問題