CASE
によるパフォーマンスの問題はないと思います ステートメント自体。 1つのクエリでデータを1回渡すため、商品IDごとに複数のクエリを実行するよりもパフォーマンスが大幅に向上する可能性があります。
WHERE
を使用すると、クエリのパフォーマンスが向上する可能性があります 条項-それがあなたの長いクエリでさえ可能であるならば。
テーブルが大きく、製品IDでインデックスが付けられており、クエリが製品の小さなサブセットを更新している場合、クエリを個別のUPDATE
に分割するとパフォーマンスが向上する可能性があります。 product_idごとのクエリ。そうしないと、巨大なテーブルでテーブルスキャンが発生する可能性があります。例:
UPDATE table SET totalAmt = a*b*c*d WHERE product_id = 1
UPDATE table SET totalAmt = c*d*e + 1 WHERE product_id = 2
すべてのケースがproduct_id
に依存している場合 、次のように構文を省略できます:
CASE product_id
WHEN 1 THEN a*b*c*d
WHEN 2 THEN ...
END
コードを読みやすくするためにコメントを使用することをお勧めします。たとえば、製品がハードコードされた既知のIDのセットである場合、それらが何であるかを指定できます。同様に、将来のコード保守が計算を説明するのに役立つ可能性があります:
UPDATE table
SET totalAmt =
CASE WHEN product_id = 1 -- table
THEN a*b*c*d -- some explanation of calculation
CASE WHEN product_id = 2 -- chair
THEN ...