sp_executesql et plan d'exécution
Bonjour,
J'ai dû faire face à un problème de performance très pénible aujourd'hui. Nous avons une appli .Net qui s'est mise à partir complètement en sucette à cause d'une requête.
Mon analyse c'est que les plans d'exécution ont changé et que la-dite requête, très mal écrite, a mal supporté le changement ;)
J'ai donc proposé une optimisation qui fonctionnait très bien... sauf dans l'appli. Finalement, on a mis le doigt sur le problème : cette requête est exécutée via sp_executesql avec des paramètres. Je pense que la chaîne de caractères envoyées ne change pas, du fait des paramètres, et le plan d'exécution n'est donc pas recalculé. En changeant juste le type des paramètres (nvarchar(32) -> nvarchar(10)) ça a suffit à forcer le calcul d'un nouveau plan et tout va bien maintenant.
Ma question est donc la suivante :
Considérant une requête du genre :
Code:
exec N' SELECT name FROM matable WHERE id = @ids ',N'@ids nvarchar(14)',@ids=N'2ZYB'
Comment être sûr, qu'elle aura le même comportement que :
Code:
SELECT name FROM matable WHERE id = N'2ZYB'
A défaut, y a-t-il une meilleure manière de procéder alors que j'ai toujours vécu dans l'idée que les variables c'est bon, mangez-en et tout :D
Merci ;)