SQL DateDifference dans une clause where
Je m en faisant une requête comme suit:
SELECT
*
FROM a
WHERE DATEDIFF(D, a.DateValue, DateTimeNow) < 3;
et pas de travail
Je m en essayant d'obtenir les données qui ne sont pas âgés de plus de 3 jours.
SQL server.
Comment faire?
DATEDIFF travaille trop lent..
source d'informationauteur DarthVader
Vous devez vous connecter pour publier un commentaire.
DateDiff
est extrêmement rapide... Votre problème est que vous êtes en cours d'exécution sur la table de base de données la valeur de la colonne, de sorte que le processeur de requête doit exécuter la fonction sur chaque ligne de la table, même si il y a un index sur cette colonne. Cela signifie qu'il a à charge l'ensemble de la table à partir du disque.Au lieu de cela, utilisez la
dateAdd
fonction sur la date d'aujourd'hui, et de comparer la colonne de table de base pour le résultat de ce calcul. Maintenant, il ne fonctionneDateAdd()
une fois, et il peut utiliser un index (s'il en existe), de charger uniquement les lignes qui correspondent le prédicat critère.Where a.DateValue > DateAdd(day,-3,getdate())
faire cela de cette façon rend votre requête prédicat SARG-mesure
La documentation de Microsoft à http://msdn.microsoft.com/en-us/library/aa258269%28v=sql.80%29.aspx suggère qu'au lieu de
DateTimeNow
vous devriez avoirgetdate()
. Est-il mieux de cette façon?Votre requête ne semble pas mauvais. Une autre façon d'aborder le problème serait: