Tôi có một truy vấn trên một bảng lớn trông như thế này:
declare @myIdParam int = 1
select *
from myTable
where (@myIdParam is null or myTable.Id = @myIdParam)
Có một số điều kiện tương tự như thế này trong mệnh đề where và cũng có rất nhiều phép nối, nhưng đây là một bản tóm tắt.
Thực tế, nếu @myIdParam là null, chúng tôi không muốn hạn chế kết quả bằng tham số này.
Tôi không phải là DB pro, nhưng từ các thử nghiệm của tôi, có vẻ như kiểm tra NULL này được thực hiện cho mọi bản ghi và không được tối ưu hóa theo bất kỳ cách nào.
Nếu tôi loại bỏ kiểm tra null và giả sử tham số không phải là null, truy vấn sẽ trả về ngay lập tức. Nếu không, phải mất đến mười giây.
Có cách nào để tối ưu hóa điều này để việc kiểm tra chỉ được thực hiện một lần khi chạy không?
OPTION(RECOMPILE)