Както обикновено при SQL, заявката е до голяма степен без значение, без да се знае действителната схема, срещу която се използва.
Имате ли индекс на Members.Phone? Ако не, тогава няма значение как пишете заявката, всички те ще сканират цялата таблица и ще се представят по същия начин (т.е. ще се представят зле). Ако имате индекс тогава начинът, по който пишете заявката, прави цялата разлика:
SELECT * FROM Members WHERE Phone= @Phone;
SELECT * FROM Members WHERE Phone= dbo.FormatPhone(@Phone);
SELECT * FROM Members WHERE dbo.FormatPhone(Phone)[email protected];
Първата заявка е гарантирано оптимална, ще търси телефона в индекса.
Втората заявка зависи от характеристиките на dbo.FormatPhone. Може или не може да използва оптимално търсене.
Гарантирано е, че последната заявка е лоша. Ще сканира масата.
Освен това премахнах подсказката за NOLOCK, изглежда темата на деня... Вижте синтаксис за nolock в sql . NOLOCK е винаги грешен отговор. Използвайте изолация на моментни снимки.