1

T13 つのテーブル ( 、T2、 )を結合する必要がありT3、これらのテーブルのそれぞれに 30 列と数百万のレコードがあるとします。関連するフィールドを取得してから結果を結合するか、3 つのテーブルを結合してから関連するフィールドを取得する方が速いでしょうか?

簡単に説明します (a、b、c の値が一意であると仮定します)。

(コードはおそらく私が意図したようには見えないでしょう。誰かがそれを修正できれば幸いです)

オプション1:

SELECT
  T1.a,
  T2.c
FROM
  T1,T2,T3
WHERE
  T1.a = T2.b
  AND T2.b = T3.c

または、オプション 2:

SELECT 
  t_T1.a,
  t_T2.c
FROM
  (SELECT a FROM T1) t_T1,
  (SELECT b FROM T2) t_T2,
  (SELECT c FROM T3) t_T3
WHERE
  t_T1.a = t_T2.b
  AND t_T2.b = t_T3.c

私が取り組んでいるテーブルでは、毎秒が重要であると想定してください。これはばかげた例のように見えるかもしれませんが、どれがより高速になるかを本当に知る必要があります。

ところで、PLSQL開発者10.0.2でORACLEを使用しています。

助けてくれてありがとう。

4

2 に答える 2

1

私はオプション1に行きます。

一般に、SQL では、クエリに最もコンパクトな表現を使用する必要があります。これにより、オプティマイザーはクエリを再構築するための「自由度」を最大限に高めることができます。オプション 2 はほとんどのオプティマイザーにとってそれほど問題にはならないかもしれませんが、これを極端にすると、オプティマイザーが実際に指定したものとは別の実行パスを選択できない場合があります。

David が述べたように、実行順序を指定する必要はありません。オプション 1 を選択するもう 1 つの理由。

最後に、人間が SQL を保守できなければならないので、最も単純な表現を選びます。この場合もオプション 1 です。

于 2013-04-17T13:42:27.433 に答える
1

おそらく同じ最適化されたクエリに解決されるため、違いはありません。

SQL は第 4 世代の言語であるため、評価順序の強制は一般的に機能しないと想定する必要があります。

于 2013-04-17T13:38:22.387 に答える