Jeg forventer ingen ydeevneproblemer fra CASE
selve udsagnet. Da din ene forespørgsel foretager én gennemgang af dataene, kan den fungere meget bedre end flere forespørgsler for hvert produkt-id.
Forespørgslen fungerer muligvis bedre med en WHERE
klausul - hvis det overhovedet er muligt med din lange forespørgsel.
Hvis tabellen er stor, og den er indekseret efter produkt-id, og forespørgslen opdaterer en lille delmængde af produkter, kan du få bedre ydeevne ved at opdele forespørgslen i separate UPDATE
forespørgsler pr. produkt-id. Ellers kan du ende med en bordscanning på et kæmpe bord. For eksempel:
UPDATE table SET totalAmt = a*b*c*d WHERE product_id = 1
UPDATE table SET totalAmt = c*d*e + 1 WHERE product_id = 2
Hvis alle tilfældene afhænger af product_id
, så kunne du forkorte syntaksen sådan her:
CASE product_id
WHEN 1 THEN a*b*c*d
WHEN 2 THEN ...
END
Jeg vil anbefale at bruge kommentarer for at gøre koden mere læsbar. Hvis produkterne f.eks. er et hårdkodet sæt kendte id'er, kan du angive, hvad de er. På samme måde kan det hjælpe fremtidig kodevedligeholdelse at forklare beregningen:
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 ...