Bonjour,
En fait je suis en train de développer une petite application Access s'appuyant sur une base d'un SQL Server Express 2008 (10.0.1600.22).
Un formulaire utilise un Recordset ADODB pour requêter le serveur. La requête utilisée est une simple requête de type sélection, qui utilise plusieurs sous-requêtes en tant que colonnes., soit tout ce qu'il y a de plus basique. Le Recordset est utilisé avec les paramètres adOpenStatic et adLockOptimistic (donc juste pour une simple consultation ponctuelle).
L'exécution de la requête via ce Recordset est instantanée. Sur le moniteur de ressource, il y a un dirac de moins d'une seconde. Et toutes les données requêtées sont bien chargées et affichées dans le formulaire.
Par contre, la même requête, avec une syntaxe strictement identique, exécutée sur la même base, mais ce coup-ci via le Management Studio (2014 pour le coup) a une exécution de 23s....
J'ai vérifié, revérifié, je retombe bien sur ces 23s.
Le Management Studio est paramétré avec les options de requête standards (soit SET ARITHABORT , SET CONCAT_NULL_YIELDS_NULL, SET ISOLATION LEVEL en READ_ONLY et DEADLOCK PRIORITY en Normal).
J'ai regardé le plan d'exécution : la totalité des coûts sont portés par les sous-requêtes utilisées en tant que colonnes de résultat (elles sont toutes identiques à un paramètre près). Et effectivement, si je supprime ces sous-requêtes, la requête est exécuté instantanément.
A noter que l'application Access, le management Studio et la base SQL Server sont hébergées sur le même poste.
Auriez-vous une idée sur la raison (paramétrage du Management Studio j'imagine) qui pourrait expliquer cet énorme différence de performance d'exécution.
Normalement, je m'attendais à une tendance inverse, mais avec un écart beaucoup plus modéré.
Je suis vraiment très circonspect ?????
Merci pour votre aide.
Partager