Ik verwacht geen prestatieproblemen van de CASE
verklaring zelf. Aangezien uw ene zoekopdracht één keer naar de gegevens gaat, presteert deze mogelijk veel beter dan meerdere zoekopdrachten voor elke product-ID.
De zoekopdracht presteert mogelijk beter met een WHERE
clausule-- als dat zelfs mogelijk is met je lange vraag.
Als de tabel groot is en is geïndexeerd op product-ID, en de query een kleine subset van producten bijwerkt, krijgt u mogelijk betere prestaties door de query op te splitsen in afzonderlijke UPDATE
zoekopdrachten per product_id. Anders kun je eindigen met een tafelscan op een enorme tafel. Bijvoorbeeld:
UPDATE table SET totalAmt = a*b*c*d WHERE product_id = 1
UPDATE table SET totalAmt = c*d*e + 1 WHERE product_id = 2
Als alle gevallen afhankelijk zijn van product_id
, dan kunt u de syntaxis als volgt afkorten:
CASE product_id
WHEN 1 THEN a*b*c*d
WHEN 2 THEN ...
END
Ik zou aanraden om opmerkingen te gebruiken om de code leesbaarder te maken. Als de producten bijvoorbeeld een hardgecodeerde set bekende ID's zijn, kunt u specificeren wat ze zijn. Evenzo kan het toekomstige code-onderhoud helpen om de berekening uit te leggen:
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 ...