Jak zwykle w przypadku SQL, zapytanie jest w dużej mierze nieistotne bez znajomości rzeczywistego schematu.
Czy masz indeks na Members.Phone? Jeśli nie, to nie ma znaczenia, jak napiszesz zapytanie, wszystkie przeskanują całą tabelę i wykonają to samo (tzn. będą działać źle). Jeśli masz indeks to sposób, w jaki piszesz zapytanie, robi różnicę:
SELECT * FROM Members WHERE Phone= @Phone;
SELECT * FROM Members WHERE Phone= dbo.FormatPhone(@Phone);
SELECT * FROM Members WHERE dbo.FormatPhone(Phone)[email protected];
Pierwsze zapytanie jest gwarantowane optymalne, będzie szukało telefonu po indeksie.
Drugie zapytanie zależy od charakterystyki dbo.FormatPhone. Może, ale nie musi używać optymalnego wyszukiwania.
Ostatnie zapytanie jest z pewnością złe. Zeskanuje stół.
Ponadto usunąłem wskazówkę NOLOCK, wydaje się, że jest to temat dnia... Zobacz składnia dla nolock w sql . NOLOCK jest zawsze Błędna odpowiedź. Użyj izolacji migawki.