sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server:Alternativ til lang CASE-sætning

Jeg forventer ingen ydeevneproblemer fra CASE selve udsagnet. Da din ene forespørgsel foretager én gennemgang af dataene, kan den fungere meget bedre end flere forespørgsler for hvert produkt-id.

Forespørgslen fungerer muligvis bedre med en WHERE klausul - hvis det overhovedet er muligt med din lange forespørgsel.

Hvis tabellen er stor, og den er indekseret efter produkt-id, og forespørgslen opdaterer en lille delmængde af produkter, kan du få bedre ydeevne ved at opdele forespørgslen i separate UPDATE forespørgsler pr. produkt-id. Ellers kan du ende med en bordscanning på et kæmpe bord. For eksempel:

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

Hvis alle tilfældene afhænger af product_id , så kunne du forkorte syntaksen sådan her:

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

Jeg vil anbefale at bruge kommentarer for at gøre koden mere læsbar. Hvis produkterne f.eks. er et hårdkodet sæt kendte id'er, kan du angive, hvad de er. På samme måde kan det hjælpe fremtidig kodevedligeholdelse at forklare beregningen:

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. Sådan får du dbms.output-værdien returneret af en PL-SQL-blok i C#

  2. Fejl:mysqlnd kan ikke oprette forbindelse til MySQL 4.1+ ved hjælp af den gamle usikre godkendelse

  3. MySQL søgeprodukter med deres attributter

  4. Henter Lås ventetimeout overskredet; prøv at genstarte transaktionen, selvom jeg ikke bruger en transaktion