Bonjour,
Nous venons de migrer un SqlServer 2000 vers 2008 R2.
Dans une appli, j'ai la requête suivante
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
and isnull(u.statut,'')=''
Si je remplace cette ligne par
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.
Partager