Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Gọi hàm trong mệnh đề where

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách đặt màu thanh trạng thái trong SSMS cho các phiên bản máy chủ SQL khác nhau - Hướng dẫn sử dụng SQL Server / TSQL Phần 6

  2. Tính toán các ngày để loại trừ các ngày cuối tuần (Thứ Hai đến Thứ Sáu) trong SQL Server

  3. Kiểm tra tình trạng máy chủ SQL chủ động, Phần 5:Chờ thống kê

  4. Làm cách nào để giữ lại các thẻ CDATA khi lưu trữ các kết quả truy vấn trong một biến Xml?

  5. GETUTCDATE () Ví dụ trong SQL Server (T-SQL)