Điều gì là hiệu quả hơn - xử lý các câu lệnh case trong sql hoặc xử lý cùng một dữ liệu bằng cách sử dụng các câu lệnh trong mã. Tôi hỏi vì đồng nghiệp của tôi có một truy vấn rất lớn có nhiều báo cáo trường hợp. Tôi khuyên cô ấy nên cởi stress của DB bằng cách viết mã các câu lệnh. Tôi thấy rằng nó hiệu quả hơn ... nhưng tại sao?Báo cáo trường hợp so với mã hóa nếu các câu lệnh
Trả lời
Có một nhiều câu hỏi cơ bản không được hỏi ở đây: Các câu lệnh CASE
này thực sự đang làm gì?
Quên hiệu suất trong một phút. Nếu CASE
chỉ được sử dụng để chuyển đổi kết quả cuối cùng của truy vấn và thực tế có thể thay thế cùng chức năng với if
hoặc select case
trong ASP, thì điều đó có thể có nghĩa là truy vấn/thủ tục cơ sở dữ liệu đang cố gắng thực hiện phải chịu trách nhiệm, chẳng hạn như định dạng. Vấn đề phân tách mối quan tâm là nghiêm trọng hơn bất kỳ vấn đề hiệu suất nào có thể xảy ra.
Nếu bạn có một truy vấn như thế này:
SELECT InvoiceID, InvoiceDate,
CASE WHEN PaidStatus = 0 THEN 'Unpaid' ELSE 'Paid' END
FROM ...
Đây chỉ là ngớ ngẩn, bởi vì giao diện người dùng, hoặc bất cứ lớp nào ánh xạ dữ liệu-to-miền, nên biết làm thế nào để chuyển đổi một trạng thái trong cơ sở dữ liệu với mô tả tương ứng của nó. Nó không có ý nghĩa để bao gồm logic này trong chính truy vấn.
Mặt khác, nếu CASE
xây dựng là một phần thiết yếu của truy vấn, như:
SELECT
SUM(CASE WHEN PaidStatus = 0 THEN Amount ELSE 0 END) AS TotalUnpaid,
SUM(CASE WHEN PaidStatus = 1 THEN Amount ELSE 0 END) AS TotalPaid
FROM ...
Đừng bao giờ cố gắng để di chuyển loại logic này đến giao diện người dùng, bởi vì cơ sở dữ liệu là nhiều tốt hơn ở đó. Và CASE
là ngữ nghĩa là một phần của truy vấn ("tính toán tổng số tiền chưa thanh toán và chưa thanh toán cho x"), nó không tiếp quản bất kỳ chức năng giao diện người dùng nào.
Lo lắng trước về vị trí thực sự của logic dựa trên những gì nó dự định thực hiện. Mối quan tâm về hiệu suất chỉ nên tham gia vào cuộc thảo luận nếu bạn thực sự nhận thấy hiệu suất đáng kể sự cố.
Câu trả lời hay! Rất hữu ích! Chính xác những gì tôi đang tìm kiếm. – Eric
Theo kinh nghiệm của tôi, các máy chủ cơ sở dữ liệu của chúng tôi lớn hơn nhiều so với các máy chủ ứng dụng của chúng tôi và thường dưới 30% không tải. Có cơ sở dữ liệu quản lý dữ liệu, sau đó có khách hàng lặp qua resultsSet. Nó là thực hành tốt hơn để có cơ sở dữ liệu chỉ trả lại dữ liệu bạn cần (nếu bạn có thể xác định điều này lên phía trước).
CASE
báo cáo được ưa chuộng hơn vì:
- SQL: Họ là tiêu chuẩn ANSI, làm cho nó di động tới cơ sở dữ liệu khác mà không cần phải thay đổi
- họ hỗ trợ "ngắn mạch"
Bạn nên truy vấn (lọc và sắp xếp) dữ liệu trong cơ sở dữ liệu và để lại bản trình bày cho tầng trình bày. Đây là vì hai lý do chính:
- Cơ sở dữ liệu được thực hiện để lọc và sắp xếp dữ liệu
- Bạn muốn kéo số tiền ít nhất của dữ liệu qua dây từ DB khi cần thiết
Như tôi đã đọc, ở đây câu hỏi cơ bản là nếu CASE tốt hơn IF trong SQL. Câu trả lời cũng phụ thuộc vào độ sâu của các điều kiện của bạn. Tìm thấy một bài viết hay ở đây. Có thể hữu ích cho ai đó. http://www.4guysfromrolla.com/webtech/102704-1.shtml
- 1. Báo cáo so với Mã hóa - suy nghĩ?
- 2. Báo cáo trường hợp/Chức năng giải mã trong Informatica
- 3. MySQL TRƯỜNG HỢP ... WHERE ... THEN báo cáo
- 4. Câu lệnh SQL tối ưu hóa Trường hợp
- 5. Nếu báo cáo với so sánh SSE trong C
- 6. Mã hóa so với thông báo
- 7. Nếu báo cáo
- 8. jQuery kết hợp các câu lệnh?
- 9. Tối ưu hóa câu lệnh chuyển đổi Java với nhiều trường hợp?
- 10. Sử dụng báo cáo trường hợp với String
- 11. Tối ưu hóa mã; chuyển đổi so với nếu là
- 12. Các mã thông báo nào có thể được tham số hóa trong các câu lệnh chuẩn bị PDO?
- 13. Nửa dấu chấm phẩy sau một trường hợp hợp lệ trong câu lệnh chuyển đổi PHP?
- 14. Nếu các câu lệnh trong các thử nghiệm
- 15. Khai báo và ném so với các trường hợp ngoại lệ không được khai báo
- 16. NẾU KHÔNG tồn tại trong câu lệnh Hợp nhất?
- 17. nếu các câu lệnh trong các nút C#
- 18. Hàm tạo hàm so với câu lệnh hàm
- 19. đơn giản hóa nếu câu lệnh - mẫu thiết kế?
- 20. Mã hóa kiểu PHP trả về; trong chuyển/trường hợp
- 21. Quay lại với `std :: move` hợp lý trong trường hợp có nhiều câu lệnh trả về?
- 22. Mã lỗi trong trường hợp ngoại lệ so với trường hợp ngoại lệ hierarhy
- 23. Sử dụng đối tượng lớp trong trường hợp câu lệnh
- 24. Trường hợp so với trường hợp khác: Cách nào hiệu quả hơn?
- 25. Các câu lệnh SQL tham số so với phương thức rất đơn giản
- 26. Mã hóa PHP báo cáo kích thước cũ
- 27. Kết hợp hai trường trong câu lệnh SELECT
- 28. T-SQL nếu lỗi báo cáo
- 29. Báo cáo tinh thể - Tóm tắt so với tổng số trường đang chạy
- 30. Hiệu suất báo cáo vòng lặp và phân bổ trước câu lệnh vòng lặp
Điều này là mơ hồ. Thông thường mọi người sẽ khuyên bạn xử lý các truy vấn dữ liệu DB trong cơ sở dữ liệu, và hãy nhớ rằng bạn có thể đi vào rất nhiều khó khăn khi cố gắng duy trì các mẫu db trong mã (nhóm/đoàn thể/phân biệt), đó là những gì dbs được tạo ra cho ... –
Dường như với tôi bạn nên nhắm mục tiêu câu hỏi này nhiều hơn tại các nhà phát triển DB, thẻ sql đơn lẻ không thực sự đủ, bạn đang sử dụng hương vị nào của cơ sở dữ liệu SQL? – AnthonyWJones