2017-09-21 24 views
0

私は質問が異なるので、私が尋ねる他の質問を拡張しようとしています。私が持っている2表:クエリー間の比較行の比較

article_en:

ID TITLE  CONTENT  HOME_POSITION 
1 article1 blablablabla 1 
2 article2 blablablabla 2 
3 article3 blablablabla 3 
4 article4 blablablabla 4 
5 article5 blablablabla 5 
6 article6 blablablabla 6 
7 article7 blablablabla 7 

article_nl:私はすでに外部キーとして追加されていないarticle_enからの最新記事を取得するには、このクエリを実行

ID TITLE CONTENT  ENGLISH_ID HOME_POSITION 
1 article1 blablablabla 5   1 
2 article1 blablablabla 7   2 

article_nlで

SELECT * 
FROM article_en 
    LEFT JOIN article_nl 
     ON article_en.id != article_nl.english_id 
ORDER BY article_en.home_position; 

このクエリは動作しますが、問題は、私は各テーブルに複数の25.000行を持っているということですので、クエリが本当に遅いです(25秒以上)ので、私は最後の100件の記事を比較するには、このクエリを制限したいです両方のテーブルの間。最後の100件の記事に外国語として追加されていない記事が最後の100件の記事にある場合は、

SELECT * 
FROM article_en 
    LEFT JOIN article_nl 
     ON article_en.id != article_nl.english_id 
ORDER BY article_en.home_position DESC limit 100; 

それは役立ちますが、その動作していない:として

は、私は別の戦略を試してみました。たぶん私は戦略を変更して、他の種類のクエリで試してみて、左結合を使わないでください。

+0

を好むよう、あなたの100件のレコードを制限/ TOPすることができますが、単純にSELECT TOP 100をやってみましたか? – Magisch

+0

サブクエリを使用してみてください。結合の代わりに、他のテーブルからIDを選択し、INクエリを使用してwhereを設定します。 – Rupal

+0

ありがとう、あなたは正しい方向に私を入れた。私は左側の結合が私の最善の選択ではなく、私は左側の外部結合に変わり、今は本当に高速です。 SELECT * LEFT OUTERはarticle_en.id = article_nl.english_id article_nl.id *が参加100 –

答えて

0

サブクエリを使用すると、(両方のテーブルの最後の100を比較する)ことができます。

例:あなたはarticle_nl内のすべてのenglish_id年代に対して毎回比較することがありますので、

SELECT TOP 100 
* FROM 
article_en 
WHERE article_en.id NOT IN (SELECT english_id FROM article_nl) 
ORDER BY home_position 

これはまだ、多少遅くなるだろうが、より速く、あなたがやっていること、その後でなければなりません。

article_nlの最新の記事100件のみをチェックしたい場合は、サブクエリを(SELECT TOP 100 english_id FROM article_nl)に変更することで可能ですが、IDが存在しないかどうかを確認するだけで誤検出が発生する可能性があることに注意してくださいarticle_nl

0

の最新100のレコードにどのような何かのような約...

SELECT * 
FROM article_en 
LEFT JOIN article_nl 
ON article_en.id = article_nl.english_id 
WHERE article_nl.english_id IS NULL 
ORDER BY article_en.home_position; 

次に、あなたが