Một câu hỏi về SARGability


11

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:

  1. Chỉ mục sẽ không được sử dụng do thao tác của cột
  2. 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)
  3. 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?

Câu trả lời:


6
  1. chính xác
  2. không nhất thiết - nó phụ thuộc vào việc có tồn tại một chỉ số phù hợp hay không và liệu CBO có quyết định sử dụng nó hay không. Ví dụ: nếu bảng nhỏ hoặc số liệu thống kê khiến trình tối ưu hóa tin rằng bộ lọc sẽ đúng với tỷ lệ phần trăm lớn của kết quả, thì có thể coi chi phí của FTS thấp hơn
  3. điều này không được đảm bảo - thậm chí có thể truy vấn thứ 2 sẽ hoạt động kém hơn - nhưng lý luận của bạn về cơ bản là đúng đắn. Ví dụ, trong trường hợp cạnh khi FTS thực sự sẽ nhanh hơn, CBO có thể chọn quét chỉ mục thay vì dựa trên dự đoán tốt nhất về chi phí - tất nhiên luôn chỉ là ước tính

Một chút googling đã đưa ra câu hỏi SO nàybài viết tìm kiếm thú vị này về SARGability


5

Jack nói đúng, vì vậy tôi sẽ không lặp lại điều đó.

Tôi sẽ chỉ thêm một số bài viết mà tôi thích liên quan đến tính khả thi của một biểu thức:

Họ đều là những nhà văn tuyệt vời với nhiều kinh nghiệm về SQL Server.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.