Tôi chỉ cần xác nhận rằng tôi hiểu một cái gì đó chính xác:
Gần đây tôi đã xem một câu hỏi SO trong đó một người dùng đã đăng câu trả lời trong Linq như:
from p in db.table where p.column.AddMinutes(1) > DateTime.Now select p
Đối với những người không quen thuộc với Linq, tôi hy vọng đầu ra của tuyên bố đó (không được kiểm tra một cách công bằng) là:
SELECT *
FROM table t
WHERE DATEADD(min, 1, t.column) >= GETDATE()
Tôi đã đăng một câu trả lời cho câu nói này rằng thao tác datetime phải nằm trên biến (trong trường hợp này GETDATE()) vì vậy trên thực tế, câu lệnh sẽ phản ánh một cái gì đó như:
SELECT *
FROM table t
WHERE t.column >= DATEADD(min, -1, GETDATE())
Trong phần trả lời của tôi, các bit tôi hiện không chắc chắn, giả sử như sau:
- Chỉ mục sẽ không được sử dụng do thao tác của cột
- Các kế hoạch truy vấn sẽ khác nhau một phần vì ở trên (không được kiểm tra, giả sử như vậy)
- Vì những điều trên, truy vấn thứ 1 sẽ thực sự hoạt động kém hơn truy vấn thứ 2.
Câu hỏi của tôi:
Tôi đã bỏ lỡ bất cứ điều gì trong lý luận của tôi? Tôi có đúng không? Cuối cùng, có ai có bài viết hay nào về SARGability không?