2017-11-27 19 views
0

で実行私は、次のような基本的なクエリEXISTS、NOT WHEREありますSELECT COUNT(*)を選択し、VS * Teradataの

select count(*) 
from TableA a 
where not exists (Select 1 from TableB b where a.ID = b.ID); 

テーブルAがテーブルB

と同じ程度8562212、レコード、

とき、私を持っているが上記のクエリを実行すると無期限に実行されます。私はちょうど

select * 

select count(*) 

を交換すると、クエリは2秒と0を返す行(予想通り)で実行されます。また、私はそれが2秒で実行され、0行を返すカウントダウン(*)を使用して、どこに存在していない(TableBが存在しない....テーブルA)の逆を実行するとき。

唯一の問題は、上記のクエリです。私は、多くの多くのDBテーブルで同様のクエリを実行し、この問題に遭遇したことはないと付け加えます。これがなぜ起こっているのでしょうか?私は困惑している。ありがとう

+0

両方のテーブルがidカラムに基づいてプライマリインデックスを必要とする可能性があります –

+0

Explainsを投稿できますか? – dnoeth

答えて

1

あなたは左の結合を試みましたか?

select count(*) 
from TableA a 
LEft join TableB b on a.ID = b.ID 
where b.ID is null 
+0

それは動作します。 MINUSクエリを使用し、この特定のテーブル比較を回避するために、カウント(*)をラップしてしまいました。他のすべては正常に動作します。とても奇妙。ありがとうございます – JD2775

+0

私は通常、クエリが存在しない代わりに左の結合を使用して、私はあなたのために働いてうれしいです。 – Markov