Ho una query che utilizza una funzione sul predicato, qualcosa del genere:
commentType = 'EL'
AND commentDateTime >= DATEADD(month,datediff(month,0,getdate()) - 13,0)
Ho un indice filtrato su commentType che ha 40 K righe e quando eseguo la query, il numero stimato di righe per la Ricerca indice è molto preciso (circa 11 K), ma per il passaggio successivo (operatore di ordinamento) ignora completamente le statistiche e stima solo il numero totale di righe nell'indice filtrato.
Perché sta succedendo? Conosco le basi della sargability e ho testato solo per ragioni di sanità mentale sostituendo il dateadd con una data effettiva (01-01-2014) e voilà ... L'ordinamento ha iniziato a indovinare correttamente il numero di righe ...
Perché sta succedendo e come posso risolverlo? Non riesco a passare una data fissa ...
DATEADD(month, -13, DATEADD(day, 1-DATEPART(day, SYSDATETIME()))
vedere se c'è qualche differenza?
(commentType, commentDate)
, si comporta meglio lì? È solo che a volte gli indici filtrati possono riportare erroneamente le stime in diversi punti dei piani. La stima sembra uscire segnalando il numero totale nell'indice filtrato, ma in realtà è che il piano viene mostrato in modo errato.
DATEADD(month,datediff(month,0,getdate()) - 13,0)
non ha senso per me. Cosa stai cercando di fare con questo? Potrebbe essere migliorato / semplificato?