sql >> Databáze >  >> RDS >> Sqlserver

SQL Server:Alternativa dlouhého příkazu CASE

Od CASE neočekávám žádné problémy s výkonem samotné prohlášení. Vzhledem k tomu, že váš jeden dotaz provádí jeden průchod dat, může fungovat mnohem lépe než více dotazů pro každé ID produktu.

Dotaz může fungovat lépe s WHERE klauzule-- pokud je to vůbec možné s vaším dlouhým dotazem.

Pokud je tabulka velká a je indexována podle ID produktu a dotaz aktualizuje malou podmnožinu produktů, můžete dosáhnout lepšího výkonu rozdělením dotazu na samostatné UPDATE dotazy na product_id. Jinak můžete skončit se skenováním stolu na obrovském stole. Například:

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

Pokud všechny případy závisí na product_id , pak byste mohli syntaxi zkrátit takto:

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

Doporučil bych používat komentáře, aby byl kód čitelnější. Pokud jsou produkty například pevně zakódovanou sadou známých ID, můžete určit, o jaké produkty se jedná. Podobně může pomoci budoucí údržbě kódu vysvětlit výpočet:

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. Jak zjistit, zda datum odpovídá intervalu v PHP nebo MySQL?

  2. Řetězec nahrazení velkými písmeny Oracle REGEXP_REPLACE

  3. Tipy a triky pro Microsoft Access 2. část – Formuláře

  4. Způsobuje tato relace Flask-SQLAchemy místního vlákna chybu, že server MySQL zmizel?