Nie oczekuję żadnych problemów z wydajnością ze strony CASE
samo oświadczenie. Ponieważ Twoje jedno zapytanie wykonuje jedno przejście do danych, może działać znacznie lepiej niż wiele zapytań dla każdego identyfikatora produktu.
Zapytanie może działać lepiej z WHERE
klauzula -- jeśli jest to nawet możliwe przy długim zapytaniu.
Jeśli tabela jest duża i jest indeksowana według identyfikatora produktu, a zapytanie aktualizuje mały podzbiór produktów, możesz uzyskać lepszą wydajność, dzieląc zapytanie na oddzielne UPDATE
zapytania na identyfikator produktu. W przeciwnym razie możesz skończyć ze skanowaniem stołu na ogromnym stole. Na przykład:
UPDATE table SET totalAmt = a*b*c*d WHERE product_id = 1
UPDATE table SET totalAmt = c*d*e + 1 WHERE product_id = 2
Jeśli wszystkie przypadki zależą od product_id
, możesz skrócić składnię w ten sposób:
CASE product_id
WHEN 1 THEN a*b*c*d
WHEN 2 THEN ...
END
Polecam używanie komentarzy, aby kod był bardziej czytelny. Na przykład, jeśli produkty są zakodowanym na stałe zestawem znanych identyfikatorów, możesz określić, jakie one są. Podobnie może pomóc w przyszłej konserwacji kodu w wyjaśnieniu obliczeń:
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 ...