2012-04-05 3 views
3

J'ai une colonne Datetime appelée CreatedOn dans une table. CreatedOn fait également partie d'un index non clusterisé où la commande est décroissante.Lequel Où la condition sur Datetime sera plus rapide?

Auparavant dans la condition where j'avais une condition comme suit

WHERE DateDiff(d,CreatedOn,GetDate()) < 180 AND ... other conditions 

J'ai changé cela

WHERE CreatedOn > '2012-04-04 00:00:00.000' AND ... other conditions 

où je calculais la date limite dans le code C# puis mettre que dans le adhoc question. Selon moi, la deuxième condition devrait être plus rapide mais je ne vois pas encore de changement significatif dans les temps d'exécution des requêtes. Mais à mesure que la taille de la table augmente, laquelle va courir plus vite?

+0

Les réponses standard sont: A) Pensez-vous que cela va vraiment avoir de l'importance? Et B) Si oui, testez-le avec vos données, structure de table, index, serveur, etc. :-) (Mais je m'attendrais à ce que le second soit plus optimisable, ce qui pourrait être plus rapide.) –

+1

@TJCrowder: A it fait (erreur SQL commune). B pas besoin à cause de A – gbn

+0

@gbn: La réponse à A n'est pas ** nécessairement ** que c'est important. Cela dépend de l'ensemble de données (par exemple, l'index est-il important). Erreur commune. ;-) –

Répondre

6

La deuxième forme. Mettre des fonctions sur des colonnes invalide l'utilisation d'index (dans presque tous les cas, donc suivez simplement cette règle toujours). Voir "Ten Common SQL Programming Mistakes", numéro 2

Questions connexes