Như thường lệ với SQL, truy vấn phần lớn không liên quan mà không biết lược đồ thực sự được sử dụng để chống lại.
Bạn có chỉ mục về Thành viên. IPhone không? Nếu không, thì cách bạn viết truy vấn cũng không có gì khác biệt, tất cả chúng sẽ quét toàn bộ bảng và xử lý như nhau (tức là hoạt động kém). Nếu bạn có chỉ mục thì cách bạn viết truy vấn sẽ tạo nên sự khác biệt:
SELECT * FROM Members WHERE Phone= @Phone;
SELECT * FROM Members WHERE Phone= dbo.FormatPhone(@Phone);
SELECT * FROM Members WHERE dbo.FormatPhone(Phone)[email protected];
Truy vấn đầu tiên được đảm bảo tối ưu, sẽ tìm kiếm điện thoại trên chỉ mục.
Truy vấn thứ hai phụ thuộc vào các đặc điểm của dbo.FormatPhone. Nó có thể có hoặc không sử dụng một tìm kiếm tối ưu.
Truy vấn cuối cùng được đảm bảo là không tốt. Sẽ quét bảng.
Ngoài ra, tôi đã xóa gợi ý NOLOCK, có vẻ như chủ đề của ngày ... Xem cú pháp cho nolock trong sql . NOLOCK là luôn luôn câu trả lời sai. Sử dụng cách ly ảnh chụp nhanh.