0

;に似たステートメントがあります。

SELECT tableA A, tableB B, tableC C
WHERE a.ID = b.ID and 
C.level = '2'

私が実行した場合

SELECT tableA A, tableB B, tableC C
WHERE a.ID = b.ID and 

私の結果は33秒で返されます。元のクエリを実行すると、結果は150秒で返されます。なぜC.level = '2'遅くなるのですか?

4

1 に答える 1

0

Oracleの実行計画を見ると、内部で何が行われているのかがわかります。ただし、要約すると、私の推測では、あなたの論理は次のとおりです。

を追加することC.level = '2'で、より小さなデータセットを取得できるはずです。したがって、より速く返されるはずです。

ただし、データベースエンジンの場合は、データを調べて各レコードをチェックし、より複雑な条件に一致するかどうかを確認する必要があります。これをどのように行うかは、スキーマによって決まります。たとえば、にインデックスがc.levelある場合、パフォーマンスの違いは無視できる程度になる可能性があります。

于 2012-09-27T12:00:40.457 に答える