に影響を与えない、私はより良い次のクエリでは、背後に何が起こるか理解したい:どのように二CASE文がパフォーマンス
SELECT s.Question_Id, s.Question,
CASE WHEN
(SUM(CASE WHEN sr.Answer = 1 THEN 1 WHEN sr.Answer = 0 THEN 0 ELSE NULL END)
) IS NULL THEN 'N/A'
ELSE CAST(SUM(CASE WHEN sr.Answer = 1 THEN 1 WHEN sr.Answer = 0 THEN 0 ELSE NULL END) AS VARCHAR) END
AS Answered_Yes
FROM SurveyResult sr
INNER JOIN Survey s
ON sr.Question_Id = s.Question_Id
GROUP BY s.Question_Id, s.Question
ただ、より良いクエリを理解するために、それは合計で調査した結果を返します。 「はい」と答えます。
注:CASE
ステートメントは単一のデータ型のみを返すことができ、NULLを返す代わりにN/Aを返すため、CAST
を実行しています。 だから私の質問は、この行(ELSE
で)んされています
CASE WHEN sr.Answer = 1 THEN 1 WHEN sr.Answer = 0 THEN 0 ELSE NULL END
は、実際には2回実行しますか?実行計画によれば、それには別の計算スカラー演算がありますが、それはちょうどWHEN
ステートメントの最初のチェックでまったく同じチェックをしたのでキャッシュを使用していますか?
このシナリオを以前に持っていて、クエリのパフォーマンスへの影響を知りたいのではないかと疑問に思っています。
この行は 'SUM(sr.Answer = 1 THEN 1 WHEN sr.Answer = 0 THEN 0 ELSE NULL END)'です。私は間違っているかもしれませんが、SQL Serverがそれを最適化するほどスマートではないと思います。 –
長さを指定しないでvarcharにキャストする(varchar(1)になります) –