Tôi không mong đợi bất kỳ vấn đề hiệu suất nào từ CASE
tuyên bố chính nó. Vì một truy vấn của bạn đang thực hiện một lần truy cập dữ liệu, nó có thể hoạt động tốt hơn nhiều so với nhiều truy vấn cho mỗi ID sản phẩm.
Truy vấn có thể hoạt động tốt hơn với WHERE
mệnh đề-- nếu điều đó thậm chí có thể thực hiện được với truy vấn dài của bạn.
Nếu bảng lớn và được lập chỉ mục theo id sản phẩm và truy vấn đang cập nhật một tập hợp con sản phẩm nhỏ, bạn có thể nhận được hiệu suất tốt hơn khi tách truy vấn thành UPDATE
riêng biệt truy vấn cho mỗi product_id. Nếu không, bạn có thể kết thúc bằng việc quét bảng trên một bảng lớn. Ví dụ:
UPDATE table SET totalAmt = a*b*c*d WHERE product_id = 1
UPDATE table SET totalAmt = c*d*e + 1 WHERE product_id = 2
Nếu tất cả các trường hợp phụ thuộc vào product_id
, thì bạn có thể viết tắt cú pháp như sau:
CASE product_id
WHEN 1 THEN a*b*c*d
WHEN 2 THEN ...
END
Tôi khuyên bạn nên sử dụng các nhận xét để làm cho mã dễ đọc hơn. Ví dụ:nếu các sản phẩm là một tập hợp mã hóa cứng gồm các ID đã biết, bạn có thể chỉ định chúng là gì. Tương tự, nó có thể giúp bảo trì mã trong tương lai để giải thích tính toán:
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 ...