1

次のようにDBにクエリを実行するとします。

SELECT
   T3.ID
   T1.factor1 * T2.factor2  * T3.VAL,
   T1.factor1 * T2.factor2  * T3.VAL,
   T1.factor1 * T2.factor2  * T3.VAL,
   T1.factor1 * T2.factor2  * T3.VAL,
               (...)
   T1.factor1 * T2.factor2  * T3.VAL
FROM
   Table3 AS T3
   LEFT JOIN Table2 AS T2 ON T3.ID = T2.Table3ID
   LEFT JOIN Table1 AS T1 ON T3.ID = T1.Table3ID

私の質問は:

エンジンT1.factor1 * T2.factor21 回またはN 回実行しますか?

(選択したDBエンジンに関連する回答をお願いします!)

より一般的な答えを出すこともできます (2 つではなくP因子があるとしましょう。

EDIT :T1.factor1 * T2.factor2出力行ごとに異なる値を持つ、選択した計算集約型の関数に置き換えることができます。

4

1 に答える 1

2
SELECT 
   T1.factor1 * T2.factor2 * T3.FIELD1, 
   T1.factor1 * T2.factor2 * T3.FIELD2, 
   T1.factor1 * T2.factor2 * T3.FIELD3, 
   T1.factor1 * T2.factor2 * T3.FIELD4, 
               (...) 
   T1.factor1 * T2.factor2 * T3.FIELDN 
FROM 
   Table3 AS T3 
   LEFT JOIN Table2 AS T2 
   LEFT JOIN Table1 AS T1 

ここで質問が何であるかわかりません-結合のためにこれを求めていますか? すべての選択式が異なるため、クエリは結合に関連していると思います

私の質問は、DB エンジンが式を複数回評価するのはなぜですか? これが複数回発生すると予想されるのは、どのようなシナリオですか?

各テーブルから値を求めています... SQL がこれらのテーブルのそれぞれから値を取得するために複数のことを行う必要があると信じるに至った理由は何ですか?

編集:質問への微調整に照らして-それは良いものです。元々、異なるスカラー演算を作成するたびに各フィールドに異なるフィールドを乗算していたため、SQL がこれを大幅に最適化することを認識しているとは思いません。

同じ計算を 300 回実行してみましたが、別のクエリは 1 回実行しましたが、SQL はクエリ コストの違いを報告しませんでした。もちろん、他にも調べることはたくさんありますが、違いが小さすぎるか、SQL がこれを最適化していると思います。

クエリ * 300 対 クエリ * 1

これは MSSQL 2005 上にあります。

計算コストの高いものを使用して独自のDBでこれを試し、クエリプランを比較します。統計やその他のパフォーマンス指標をチェックする価値があるかもしれません

于 2012-08-02T09:35:12.053 に答える