1

私はいくつかのストアド プロシージャを最適化しようとしていますが、それらは非常に頻繁に EXISTS、ANY、または IN を使用しており、IN、Exists、または ANY のいずれが最適な特定のシナリオの違いを知りたいと考えています。

IN、EXISTS、ANY を使用して 3 つのクエリを作成し、それらの実行サイクルを確認しましたが、3 つのクエリの実行サイクルはすべて同じです。なぜ同じになるのか、実行サイクルがどのように異なるのか、または異なる可能性があるシナリオは何なのか、私は混乱しています。以下は、私が試した3つのクエリとそれらの実行サイクルです。実行サイクルを変更する方法の例を教えてください。シナリオまたはクエリを共有してください。

EXISTS を使用したクエリ

サブクエリでもう 1 つ質問があります。* または列を指定する必要があるのは何ですか?

SELECT * FROM RecastEvents AS re
    WHERE EXISTS (Select * FROM Metadata 
                      WHERE EventId = 2145984 AND EventId = re.CCId)

Exists の実行サイクル

IN を使用したクエリ

SELECT * FROM RecastEvents as re
    WHERE re.CCID IN (SELECT EventId FROM Metadata
                          WHERE EventId = 2145984)

INの実行周期

ANY を使用したクエリ

SELECT * FROM RecastEvents AS re
    WHERE re.CCID = ANY (SELECT EventId FROM Metadata 
                             WHERE EventId = 2145984)

ここに画像の説明を入力

4

2 に答える 2

3

クエリオプティマイザーがその仕事をしているので、同じ結果になっています。

SQL (および同様の言語) の目的の 1 つは、必要な方法ではなく、必要なものを指定してクエリを記述し、クエリ システムにその方法を処理させることです。

この場合、クエリ オプティマイザーのルールは、同じ実際のクエリ実行プランになります。これは、後でデータの量に応じて変更される場合と変更されない場合があります。私の推測では、そうではありません。

*最初のについては、1代わりに試してみるとうまくいくでしょう。この場合、「データ」のプレースホルダーとして使用されます。

于 2013-07-09T18:55:39.177 に答える