sql >> Database >  >> RDS >> Sqlserver

SQL Server:alternatief voor lange CASE-instructie

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


  1. Bereken het verschil tussen 2 datums / tijden in Oracle SQL

  2. Hoe een localhost-database maken met mysql?

  3. mysql selecteer alleen gegevens van volgende week

  4. karakter 0xc286 van codering UTF-8 heeft geen equivalent in WIN1252....Bij conversie met iconv postgres herstel crasht