WHERE フィルターに基づいてこのクエリを最適化する方法はありますか? 互換性の理由から、計算列を使用できません。それ以外に、私はどんな提案も受け入れます:
UPDATE #ATempTable
SET SomeTotal = (QuantityA + QuantityB + QuantityC)
- (dbo.fmin(dbo.fmax(ISNULL(ValueA,0)
,dbo.fmax(ISNULL(ROUND(ValueB,0),0)
, ISNULL(ValueC,0))), ISNULL(round(ValueD,0), 9999999)))
WHERE QuantityA + QuantityB + QuantityC >
(dbo.fmin(dbo.fmax(ISNULL(ValueA,0)
,dbo.fmax(ISNULL(ROUND(ValueB,0),0)
, ISNULL(ValueC,0))), ISNULL(round(ValueD,0), 9999999)))
SQL Server 2008 R2 を使用しています。fmax
とfmin
は、指定された 2 つの値の最大値と最小値をそれぞれ返すユーザー定義関数であり、スキーマにバインドされていません。
編集:追加情報
#ATempTable は、アプリケーションによって呼び出されるプロシージャ内の一時テーブルです。SomeTotal、QuantityA/B/C、および ValueA/B/C/D はすべて、そのテーブルのフィールドです。いいえ、コードはそのようではありません。フィールドの名前を変更しました。