Bonjour,


Nous venons de migrer un SqlServer 2000 vers 2008 R2.
Dans une appli, j'ai la requête suivante
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
select distinct
    u.id_badge as badge,
    u.id_user,
    u.password,                                 
    case when p.num_vehi = 'MANA' then '9999' else p.num_vehi end as num_vehi
from vRESUsersGlob u
    inner join acc_accespompe p on u.code_chauffeur = p.p_code                                                    
    inner join acc_vehicule v on (case when p.num_vehi = 'MANA' then '9999' else p.num_vehi end) = v.num
where u.id_badge is not null
    and isnull(u.statut,'')=''                                 
    and u.password is not null
    and v.carburant <> 'NE'
    and p.borne_03 = 'A'
Cette requête fonctionnait très bien avec SQLServer 2000 (à peine 2 à 3 secondes), mais depuis la migration, il faut plus de 3 minutes pour obtenir les quelques 500 lignes de résultat.

Pour info, "vRESUsersGlob" est une vue qui pointe sur plusieurs serveurs liés.

Après quelques recherches et tentatives, j'ai pu isoler la ligne qui posait problème, dans la clause WHERE
Code : Sélectionner tout - Visualiser dans une fenêtre à part
and isnull(u.statut,'')=''
Si je remplace cette ligne par
Code : Sélectionner tout - Visualiser dans une fenêtre à part
and coalesce(u.statut,'')=''
alors ça ne prend de nouveau plus que quelques secondes...

Quelqu'un aurait-il une explication logique à ce phénomène ?

Merci.