Devo solo confermare di aver capito qualcosa correttamente:
Di recente ho visualizzato una domanda SO in cui un utente ha pubblicato una risposta in Linq come:
from p in db.table where p.column.AddMinutes(1) > DateTime.Now select p
Per coloro che non hanno familiarità con Linq, mi aspetto che l'output di tale affermazione (non testato in modo equo) sia:
SELECT *
FROM table t
WHERE DATEADD(min, 1, t.column) >= GETDATE()
Ho pubblicato una risposta a questo dicendo che la manipolazione del datetime dovrebbe essere sulla variabile (in questo caso GETDATE()
), quindi in realtà l'affermazione dovrebbe riflettere qualcosa come:
SELECT *
FROM table t
WHERE t.column >= DATEADD(min, -1, GETDATE())
Nella mia risposta, i bit di cui ora non sono sicuro, assumono quanto segue:
- Gli indici non verranno utilizzati a causa della manipolazione della colonna
- I piani di query saranno diversi in parte a causa di quanto sopra (non testato, presupponendolo)
- A causa di quanto sopra, la prima query avrà effettivamente prestazioni peggiori rispetto alla seconda.
La mia domanda:
Ho perso qualcosa nel mio ragionamento? Ho ragione? Infine, qualche organismo ha buoni articoli sulla SARGability?