Tôi đã chiến đấu với cái này trong một thời gian. Tôi có một proc được lưu trữ trong 3 thông số được sử dụng để lọc. Nếu một giá trị cụ thể được chuyển vào, tôi muốn lọc nó. Nếu -1 được thông qua, hãy cho tôi tất cả.T-SQL Trường hợp khoản Tối ưu hóa trường hợp khoản (tham số tùy chọn cho StoredProc)
Tôi đã thử nó trong hai cách sau:
cách đầu tiên:
SELECT field1, field2...etc
FROM my_view
WHERE
parm1 = CASE WHEN @PARM1= -1 THEN parm1 ELSE @PARM1 END
AND parm2 = CASE WHEN @PARM2 = -1 THEN parm2 ELSE @PARM2 END
AND parm3 = CASE WHEN @PARM3 = -1 THEN parm3 ELSE @PARM3 END
Thứ hai Way:
SELECT field1, field2...etc
FROM my_view
WHERE
(@PARM1 = -1 OR parm1 = @PARM1)
AND (@PARM2 = -1 OR parm2 = @PARM2)
AND (@PARM3 = -1 OR parm3 = @PARM3)
Tôi đọc ở đâu đó rằng cách thứ hai sẽ ngắn mạch và không bao giờ đánh giá phần thứ hai nếu đúng. DBA của tôi nói rằng nó buộc phải quét bảng. Tôi chưa xác minh điều này, nhưng có vẻ như chạy chậm hơn trong một số trường hợp.
Bảng chính mà chế độ xem này chọn có khoảng 1,5 triệu bản ghi và lượt xem tiến hành tham gia vào khoảng 15 bảng khác để thu thập một loạt thông tin khác.
Cả hai phương pháp này đều chậm ... đưa tôi từ tức thời đến bất kỳ đâu từ 2-40 giây, trong trường hợp của tôi hoàn toàn không thể chấp nhận được.
Có cách nào tốt hơn không liên quan đến việc chia nhỏ nó xuống từng trường hợp riêng biệt cụ thể so với -1 không?
Mọi trợ giúp đều được đánh giá cao. Cảm ơn.
Chết tiệt. Đánh tôi đi. +1 :) – DVK
Tùy chọn đầu tiên sẽ không nhất thiết trả lại kết quả giống như kết quả thứ hai. Nếu bạn có các hàng trong bảng của bạn với các giá trị NULL, chúng sẽ KHÔNG được trả về bởi truy vấn "tùy chọn 1". Ví dụ .... Chọn * Từ Bảng Trường hợp NullableColumn = NullableColumn –
Cả ba parm đều KHÔNG NULL, do đó, đó không phải là vấn đề trong trường hợp này. Có vẻ như tôi có thể bị kẹt với lựa chọn 1. – IronicMuffin