Jag förväntar mig inga prestandaproblem från CASE
själva uttalandet. Eftersom din ena fråga gör en genomgång av data, kan den fungera mycket bättre än flera frågor för varje produkt-ID.
Frågan kan fungera bättre med en WHERE
klausul - om det ens är möjligt med din långa fråga.
Om tabellen är stor och den är indexerad efter produkt-id och frågan uppdaterar en liten delmängd av produkter kan du få bättre prestanda genom att dela upp frågan i separata UPDATE
frågor per produkt-id. Annars kan du sluta med en bordsskanning på ett stort bord. Till exempel:
UPDATE table SET totalAmt = a*b*c*d WHERE product_id = 1
UPDATE table SET totalAmt = c*d*e + 1 WHERE product_id = 2
Om alla fall beror på product_id
, då kan du förkorta syntaxen så här:
CASE product_id
WHEN 1 THEN a*b*c*d
WHEN 2 THEN ...
END
Jag skulle rekommendera att du använder kommentarer för att göra koden mer läsbar. Om produkterna till exempel är en hårdkodad uppsättning kända ID:n kan du ange vad de är. På samma sätt kan det hjälpa framtida kodunderhåll att förklara beräkningen:
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 ...