Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL Server:Thay thế cho câu lệnh CASE dài

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tránh đặt tên theo thủ tục do người dùng lưu trữ SP% hoặc SP_%

  2. Cách thực thi tập lệnh đã tạo (tệp .sql) với lược đồ và dữ liệu trong SQL Server 2008

  3. ALTER DATABASE / ADD FILE / VARIABLE FILENAME?

  4. SQL Server - Điều gì xảy ra khi một hàng trong bảng được cập nhật?

  5. Di chuyển bảng máy chủ SQL sang nhóm tệp khác nhau