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

Áp dụng lọc có điều kiện trong mệnh đề WHERE

Đầu tiên, ((J.Id = @Jobid and @Jobid>0) or @Jobid=0) có thể được thay thế
bằng (@Jobid = 0 or J.Id = @Jobid) .Lưu ý rằng kể từ 0 rõ ràng không phải là giá trị hợp lệ cho id công việc (hoặc nhân viên hoặc khách hàng tiềm năng), and phần này không liên quan vì không có bản ghi nào chứa id bằng 0.

Thứ hai, không sử dụng 0 là một giá trị không hợp lệ, hãy sử dụng null thay vì. nó sẽ không ảnh hưởng đến hiệu suất, nhưng đó là một thói quen lập trình tốt hơn, vì 0 rất có thể là một giá trị hợp lệ trong các tình huống khác.

Thứ ba, các truy vấn tóm tắt được biết là bị ảnh hưởng hiệu suất, đặc biệt là trong các thủ tục được lưu trữ, vì kế hoạch thực thi được lưu trong bộ nhớ cache có thể không phải là tốt nhất cho việc thực thi hiện tại. Theo hiểu biết của tôi, cách tốt nhất để xử lý vấn đề này là thêm gợi ý biên dịch lại vào truy vấn, như được đề xuất trong bài viết này và trong bài viết đó .

Vì vậy, tôi đề nghị truy vấn của bạn trông giống như sau:

CREATE PROCEDURE <procedure name>
(
        @Jobid      INT=NULL,
        @leadid     INT=NULL,
        @employeeid INT=NULL
)
AS

SELECT e.id,
       l.id,
       j.id,
       e.NAME,
       l.NAME,
       j.NAME
FROM   employee e
       INNER JOIN leads l
               ON e.leadid = l.id
       INNER JOIN Jobs j
               ON j.id = e.Jobid 
WHERE (@Jobid IS NULL OR J.Id = @Jobid)
AND (@leadid IS NULL OR l.Id = @leadid)
AND (@employeeid IS NULL OR e.Id = @employeeid)
OPTION(RECOMPILE)

GO

hiệu suất lựa chọn thường được cải thiện với việc lập chỉ mục chính xác của các bảng. Tuy nhiên, lập chỉ mục một cách chính xác đòi hỏi kiến ​​thức không phải lập trình viên nào cũng có. Đó là một chủ đề rất đáng đọc. Tôi sẽ bắt đầu tại đây .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bạn có thể gọi một dịch vụ web từ mã TSQL không?

  2. SQL Server 2017:Nhập dữ liệu CSV từ Linux sang Salesforce bằng SSIS

  3. Làm thế nào để nhận tổng số giờ giữa hai ngày trong máy chủ sql?

  4. Sự khác biệt giữa kết nối trái và tham gia phải trong SQL Server

  5. sao chép bảng có dữ liệu sang cơ sở dữ liệu khác trong SQL Server 2008