このステートメントは非常に長い間実行され、何も返しません。私は何が間違っているのですか?
SELECT *
FROM supplierdata AS s1
WHERE s1.zip IN (
SELECT zip
FROM supplierdata AS s2
WHERE s1.zip = s2.zip
);
あなたのステートメントは非効率的であるため、長い間実行されています。
ただし、最初に、クエリは実際には意味がありません。以下は同等です:
select *
from supplierdata
where zip is not null
クエリを強制終了し、にインデックスを作成することをお勧めしますsupplierdata(zip)
。これにより、クエリのパフォーマンスが大幅に向上します。
本質的に、クエリはのすべての行に対してサブクエリを実行していますsupplierdata
。これは非常に費用がかかり、テーブルの全表スキャンが必要です。インデックスでこれを修正する必要があります。
あなたは非常に貧弱な人の数をしているので、あなたのクエリは基本的に次のようになります:
同じことを達成するためのより簡単な方法。zipがnullではないsupplierdatas1からcount(1)を選択します
「これは意味をなさない」とは別に:
select *
from supplierdata as s1
where s1.zip IN
(select zip from supplierdata as s2 where s2.zip between 200 and 300);
と同等
select *
from supplierdata as s1
where s1.zip
between 200 and 300;
などなど....意味をなさないでください....達成しようとしたことを説明すると、より良いはずです;)
または、親クエリを参照しない条件。@Nixが言うように、最初は行ごとに移動するため、ループは無限ではありません。