Od CASE
neočekávám žádné problémy s výkonem samotné prohlášení. Vzhledem k tomu, že váš jeden dotaz provádí jeden průchod dat, může fungovat mnohem lépe než více dotazů pro každé ID produktu.
Dotaz může fungovat lépe s WHERE
klauzule-- pokud je to vůbec možné s vaším dlouhým dotazem.
Pokud je tabulka velká a je indexována podle ID produktu a dotaz aktualizuje malou podmnožinu produktů, můžete dosáhnout lepšího výkonu rozdělením dotazu na samostatné UPDATE
dotazy na product_id. Jinak můžete skončit se skenováním stolu na obrovském stole. Například:
UPDATE table SET totalAmt = a*b*c*d WHERE product_id = 1
UPDATE table SET totalAmt = c*d*e + 1 WHERE product_id = 2
Pokud všechny případy závisí na product_id
, pak byste mohli syntaxi zkrátit takto:
CASE product_id
WHEN 1 THEN a*b*c*d
WHEN 2 THEN ...
END
Doporučil bych používat komentáře, aby byl kód čitelnější. Pokud jsou produkty například pevně zakódovanou sadou známých ID, můžete určit, o jaké produkty se jedná. Podobně může pomoci budoucí údržbě kódu vysvětlit výpočet:
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 ...