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 .