Не очаквам проблеми с производителността от CASE
самото изявление. Тъй като вашата една заявка извършва еднократно преминаване към данните, тя може да се представи много по-добре от множество заявки за всеки идентификатор на продукт.
Заявката може да работи по-добре с WHERE
клауза-- ако това дори е възможно с вашата дълга заявка.
Ако таблицата е голяма и е индексирана по идентификатор на продукт и заявката актуализира малко подмножество от продукти, може да получите по-добра производителност, като разделите заявката на отделни 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
Бих препоръчал да използвате коментари, за да направите кода по-четлив. Например, ако продуктите са твърдо кодиран набор от известни идентификатори, можете да посочите какви са те. По същия начин може да помогне за бъдеща поддръжка на кода, за да обясни изчислението:
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 ...