Je constate un comportement étrange après la récente mise à niveau du serveur Sql vers 2008 r2 à partir du serveur Sql 2005. Avant la mise à niveau, la requête s'exécutait en secondes, mais après la mise à niveau, elle prend 10 secondes. La table a des millions de lignes.La requête est lente après la mise à niveau vers Sql Server 2008 R2 de Sql Server 2005
Il existe un index sur la colonne nullBable colB dans la table modèle. Ci-dessous la requête est évidemment fait scan d'index comme il est isnull fonction scalaire utilisé Rejoindre l'article ..
select distinct a.colA
from ptransaction a
inner join model b on ISNULL(b.colB,0) = a.colB
where a.transid = 234
Je n'ai pas un plan de pré-mise à niveau d'information, mais cette requête n'a jamais couru pour plus de 1 seconde .. Donc, je ne sais pas si quelque chose a changé dans le comportement de l'optimiseur dans Sql Server 2008, ce qui le rend lent.
Je connais une autre solution, mais je ne veux pas modifier le schéma à la hâte .. Je sais que je peux convertir colB dans le modèle comme notnull pour résoudre ce problème. Une autre solution consiste à créer une colonne calculée indexée qui résoudrait ce problème. Les changements de schémas dans notre environnement n'est pas facile, donc nous voulons explorer si le gourou Sql a ici une idée ou une autre solution qui ne nécessitera pas de changement de schéma. Je n'arrive toujours pas à comprendre comment l'optimiseur ou la mise à niveau globale du serveur sql peuvent aggraver cette requête. Toute aide appréciée.
NJ
Nah..Still faire Index numérisez et même performance..I obtenir un certain coup de pouce en supprimant le parallélisme, mais rien de significatif ..Guess continuer à chercher à l'améliorer .. – user1679411