2012-09-18 3 views
1

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

Répondre

0

Dans mon expérience, s'il y a beaucoup de dossiers ISNULL ralentit le requête.

Essayez ce code, le résultat est le même, mais je tends à obtenir les meilleures performances:

(b.colB is not null and b.colB = a.colB) OR (b.colB is null and a.colB = 0) 
+0

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

Questions connexes