Não espero nenhum problema de desempenho do
CASE
própria declaração. Como sua única consulta está fazendo uma passagem nos dados, ela pode ter um desempenho muito melhor do que várias consultas para cada ID de produto. A consulta pode ter um desempenho melhor com um
WHERE
cláusula-- se isso for possível com sua consulta longa. Se a tabela for grande e estiver indexada por ID do produto e a consulta estiver atualizando um pequeno subconjunto de produtos, você poderá obter um desempenho melhor dividindo a consulta em
UPDATE
separado consultas por product_id. Caso contrário, você pode acabar com uma varredura de mesa em uma mesa enorme. Por exemplo:UPDATE table SET totalAmt = a*b*c*d WHERE product_id = 1
UPDATE table SET totalAmt = c*d*e + 1 WHERE product_id = 2
Se todos os casos dependerem de
product_id
, então você pode abreviar a sintaxe assim:CASE product_id
WHEN 1 THEN a*b*c*d
WHEN 2 THEN ...
END
Eu recomendaria usar comentários para tornar o código mais legível. Por exemplo, se os produtos forem um conjunto codificado de IDs conhecidos, você poderá especificar quais são. Da mesma forma, pode ajudar a futura manutenção do código para explicar o cálculo:
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 ...