SQL ではよくあることですが、実際のスキーマが使用されていることを知らなければ、クエリはほとんど無関係です。
Member.Phone にインデックスはありますか?いいえの場合、クエリの記述方法に違いはありません。すべてのクエリがテーブル全体をスキャンし、同じことを実行します (つまり、パフォーマンスが低下します)。 インデックスがある場合 クエリの書き方ですべてが変わります:
SELECT * FROM Members WHERE Phone= @Phone;
SELECT * FROM Members WHERE Phone= dbo.FormatPhone(@Phone);
SELECT * FROM Members WHERE dbo.FormatPhone(Phone)[email protected];
最初のクエリは最適であることが保証され、インデックスで電話をシークします。
2 番目のクエリは、dbo.FormatPhone の特性に依存します。最適なシークを使用する場合と使用しない場合があります。
最後のクエリは悪いことが保証されています。テーブルをスキャンします。
また、NOLOCK ヒントを削除しました。これが今日のテーマのようです... SQL の nolock の構文 . NOLOCK は常に 間違った答え。スナップショット分離を使用します。