0

A+Bの合計を生成したい2つのデータ列AとBを持つ単純なデータロギングテーブルがあります。ただし、AとBのいずれかまたは両方がnullになる可能性があります。テーブルには、主キーであるタイムスタンプ列もあります

この猫の皮を剥ぐ方法はいくつかありますが、タイムスタンプの範囲でデータを合計するのに適した方法を知りたいと思いました。

1. SUM(Coalesce(A,0)+Coalesce(B,0))

2. SUM(Coalesce(A+B,A,B,0))

3. Coalesce( Sum(A), 0) + Coalesce( SUM(B), 0)

実行プランナーから次の結果が得られます。

フォーム選択ComputeScalarStream Aggregate Compute Scaler Clustered Index Seek
  1 0%0%11%1%87%    
  2 0%0%11%1%87%    

フォーム選択ComputeScalarCompute Scaler Stream Aggregate Clustered Index Seek
  3 0%0%0%12%88%    

これまでクエリプランを詳しく調べたことがないので、数値の解釈方法がわかりません。一般に、右側に押すほど、全体的なパーセンテージが歪んでいると言っても過言ではありませんか?フォーム3を1と2よりも優れたものにしますか?

4

1 に答える 1

2

予想されるケースに合わせて最適化します。

ここで、AとBの両方にほとんどの場合値がある場合、合体はその最初の値に到達して停止するため、#2の方がうまくいくはずです。AまたはBがNULLであることが非常に多い場合は、#1を使用すると少しうまくいく可能性があります。ここで重要なのは、いつものように、両方を試し、実際のデータで実際の時間をプロファイリングすることです。

于 2009-12-09T00:46:41.613 に答える