Sadece bir şeyi doğru anladığımı doğrulamam gerekiyor:
Yakın zamanda bir kullanıcının Linq'te şöyle bir cevap paylaştığı bir SO sorusunu inceledim:
from p in db.table where p.column.AddMinutes(1) > DateTime.Now select p
Linq'e aşina olmayanlar için, bu ifadenin çıktısının (adalet içinde test edilmedi) olmasını beklerdim:
SELECT *
FROM table t
WHERE DATEADD(min, 1, t.column) >= GETDATE()
Ben tarih-saat manipülasyon (bu durumda GETDATE()
) değişken üzerinde olması gerektiğini söyleyerek bir cevap yayınladı, bu yüzden aslında ifade gibi bir şey yansıtmalıdır:
SELECT *
FROM table t
WHERE t.column >= DATEADD(min, -1, GETDATE())
Cevabımda, şimdi emin olmadığım bitler, aşağıdakileri varsayalım:
- Sütunun manipülasyonu nedeniyle dizinler kullanılmayacak
- Sorgu planları, yukarıdaki nedenlerden dolayı kısmen farklı olacaktır (test edilmedi, varsayalım)
- Yukarıdakilerden dolayı, ilk sorgu aslında 2'den daha kötü performans gösterir.
Benim sorum:
Akıl yürütmemde hiçbir şeyi kaçırdım mı? Doğrumuyum? Son olarak, herhangi bir organın SARGability hakkında iyi makaleleri var mı?