Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Terapkan pemfilteran bersyarat dalam klausa WHERE

Pertama, ini ((J.Id = @Jobid and @Jobid>0) or @Jobid=0) bisa diganti
dengan ini (@Jobid = 0 or J.Id = @Jobid) .Perhatikan bahwa sejak 0 jelas bukan nilai yang valid untuk id pekerjaan (atau karyawan, atau pemimpin), and bagian tidak relevan karena tidak ada catatan yang akan berisi id 0.

Kedua, jangan gunakan 0 sebagai nilai yang tidak valid, gunakan null alih-alih. itu tidak akan mempengaruhi kinerja, tetapi ini adalah kebiasaan pemrograman yang lebih baik, karena 0 mungkin menjadi nilai yang valid dalam situasi lain.

Ketiga, kueri tangkap-semua diketahui mengalami penurunan kinerja, terutama dalam prosedur tersimpan, karena rencana eksekusi yang di-cache mungkin bukan yang terbaik untuk eksekusi saat ini. Sejauh pengetahuan saya, cara terbaik untuk menangani ini adalah dengan menambahkan petunjuk kompilasi ulang ke kueri, seperti yang disarankan di artikel ini dan di artikel itu .

Jadi, saya sarankan kueri Anda terlihat seperti ini:

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

pilih kinerja biasanya ditingkatkan dengan pengindeksan tabel yang benar. Namun, Pengindeksan dengan benar membutuhkan pengetahuan yang tidak dimiliki semua pengembang. Ini adalah subjek yang layak untuk dibaca. Saya akan mulai di sini .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memecahkan Masalah saat Bekerja dengan Tanggal dan Waktu di SQL Server

  2. Bisakah saya mengoptimalkan kueri SELECT DISTINCT x FROM hugeTable dengan membuat indeks pada kolom x?

  3. Bangun dan Deploy paket SSIS menggunakan VSTS

  4. apa cara terbaik untuk menjalankan pekerjaan Agen Sql menggunakan C #?

  5. Cara Mengatur Bahasa Saat Ini di SQL Server (T-SQL)