Seperti biasa dengan SQL, kueri sebagian besar tidak relevan tanpa mengetahui skema aktual yang digunakan.
Apakah Anda memiliki indeks di Members.Phone? Jika tidak, maka tidak ada bedanya bagaimana Anda menulis kueri, mereka semua akan memindai seluruh tabel dan melakukan hal yang sama (mis. berkinerja buruk). Jika Anda memiliki indeks maka cara Anda menulis kueri membuat semua perbedaan:
SELECT * FROM Members WHERE Phone= @Phone;
SELECT * FROM Members WHERE Phone= dbo.FormatPhone(@Phone);
SELECT * FROM Members WHERE dbo.FormatPhone(Phone)[email protected];
Permintaan pertama dijamin optimal, akan mencari telepon di indeks.
Kueri kedua tergantung pada karakteristik dbo.FormatPhone. Ini mungkin atau mungkin tidak menggunakan pencarian yang optimal.
Kueri terakhir dijamin buruk. Akan memindai tabel.
Juga, saya menghapus petunjuk NOLOCK, sepertinya tema hari ini... Lihat sintaks untuk nolock di sql . NOLOCK selalu jawaban yang salah. Gunakan isolasi snapshot.