Мені просто потрібно підтвердити, що я щось правильно розумію:
Нещодавно я переглянув питання SO, на яке користувач опублікував відповідь у Linq:
from p in db.table where p.column.AddMinutes(1) > DateTime.Now select p
Для тих, хто не знає Linq, я б очікував, що результат цього твердження (не перевіреного на справедливість) буде таким:
SELECT *
FROM table t
WHERE DATEADD(min, 1, t.column) >= GETDATE()
Я опублікував відповідь на цю заяву, що маніпуляція з датою повинна бути на змінній (в даному випадку GETDATE()
), тому насправді заява повинна відображати щось на кшталт:
SELECT *
FROM table t
WHERE t.column >= DATEADD(min, -1, GETDATE())
У своїй відповіді, біти, в яких я зараз не впевнений, припустимо наступне:
- Індекси не використовуватимуться через маніпулювання стовпцем
- Плани запитів будуть відрізнятися частково через вищесказане (не перевірено, якщо припустити)
- Через вищезазначене, 1-й запит буде справді гіршим, ніж 2-й.
Моє запитання:
Чи я щось пропустив у своїх міркуваннях? Я прав? Нарешті, чи має будь-який орган хороші статті про SARGability?