sql >> Base de Datos >  >> RDS >> Sqlserver

SQL Server:Alternativa de sentencia CASE larga

No espero ningún problema de rendimiento del CASE declaración misma. Dado que su única consulta está realizando una sola pasada a los datos, podría funcionar mucho mejor que varias consultas para cada ID de producto.

La consulta puede funcionar mejor con WHERE cláusula, si eso es posible con su consulta larga.

Si la tabla es grande y está indexada por ID de producto, y la consulta actualiza un pequeño subconjunto de productos, es posible que obtenga un mejor rendimiento dividiendo la consulta en UPDATE separados consultas por product_id. De lo contrario, puede terminar con un escaneo de tabla en una tabla enorme. Por ejemplo:

UPDATE table SET totalAmt = a*b*c*d WHERE product_id = 1
UPDATE table SET totalAmt = c*d*e + 1 WHERE product_id = 2

Si todos los casos dependen de product_id , entonces podría abreviar la sintaxis de esta manera:

CASE product_id
    WHEN 1 THEN a*b*c*d
    WHEN 2 THEN ...
END

Recomendaría usar comentarios para que el código sea más legible. Por ejemplo, si los productos son un conjunto codificado de identificaciones conocidas, puede especificar cuáles son. Del mismo modo, puede ayudar al futuro mantenimiento del código explicar el 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 ...