Je ne m'attends à aucun problème de performances de la part du CASE
déclaration elle-même. Étant donné que votre requête unique effectue une seule passe sur les données, elle peut être beaucoup plus performante que plusieurs requêtes pour chaque ID de produit.
La requête peut être plus performante avec un WHERE
clause-- si cela est encore possible avec votre longue requête.
Si le tableau est volumineux et qu'il est indexé par ID de produit et que la requête met à jour un petit sous-ensemble de produits, vous obtiendrez peut-être de meilleures performances en divisant la requête en UPDATE
distincts. requêtes par product_id. Sinon, vous risquez de vous retrouver avec un scan de table sur une immense table. Par exemple :
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 tous les cas dépendent de product_id
, vous pouvez alors abréger la syntaxe comme suit :
CASE product_id
WHEN 1 THEN a*b*c*d
WHEN 2 THEN ...
END
Je recommanderais d'utiliser des commentaires pour rendre le code plus lisible. Par exemple, si les produits sont un ensemble codé en dur d'ID connus, vous pouvez spécifier ce qu'ils sont. De même, cela peut aider la future maintenance du code d'expliquer le calcul :
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 ...