Nous avons récemment rencontré un problème étrange de performances avec SQL Server 2008performances étrange des requêtes en utilisant 'max'
Compte tenu de ces deux requêtes (qui sont équivalentes)
select max(tfiv_value) from tablefieldintvalue where tfiv_fk_tablefield = 48
et
select max(tfiv_value) from tablefieldintvalue where tfiv_fk_tablefield =
(select tbfl_pk from tablefield where tbfl_name = 'Field with pk 48')
Le premier prend environ 20 secondes, tandis que le second prend 0.
ar la sous-requête
(select tbfl_pk from tablefield where tbfl_name = 'Field with pk 48')
a pour résultat 48.
Nous voyons dans le plan de requête qui transforme la seconde requête en jointure, mais cela ne me explique pas encore pourquoi cette différence de performance se produit. Dans mon esprit, s'il y aurait une différence, la première devrait être plus rapide.
Nous avons un index sur tous les champs pertinents.
Ces minutages sont-ils cohérents? Ou, avez-vous simplement exécuté le premier, notez que cela a pris du temps, puis exécutez le second? –
Ils sont cohérents, la première requête commence à courir un peu plus vite après un certain temps (descend à 6 secondes) mais reste beaucoup plus lente que la seconde. –