Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Server:Alternativa de instrução CASE longa


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 ...