OVH Cloud OVH Cloud

Utilisation dex index

3 réponses
Avatar
Robert
Lorsque l'on ex=E9cute une requ=EAte sql dans l'analyseur de
requetes, le plan de maintenance indique quel index est=20
utilis=E9 (plan d'ex=E9cution)

Nous avons remarqu=E9 que la m=EAme requ=EAte ex=E9cut=E9e dans un =20
programme VB6 (SP5) n'utilisait pas le m=EAme index que=20
celui utilis=E9 par l'analyseur de requ=EAte.

Pour que cela fonctionne, nous avons du indiquer l'index=20
=E0 utiliser dans la clause select.

Est-ce quelqu'un a constat=E9 ce ph=E9nom=E8ne ? Des avis ?

Merci =E0 tous.

3 réponses

Avatar
Patrice
Même base, même données (ce qui inclut le nombre d'enregistrements) ?
Vérifier peut-être avec le "générateur de profil" quelle est l'instruction
SQL envoyée au serveur...

Patrice


--

"Robert" a écrit dans le message de
news:3d4301c49fe6$797a7720$
Lorsque l'on exécute une requête sql dans l'analyseur de
requetes, le plan de maintenance indique quel index est
utilisé (plan d'exécution)

Nous avons remarqué que la même requête exécutée dans un
programme VB6 (SP5) n'utilisait pas le même index que
celui utilisé par l'analyseur de requête.

Pour que cela fonctionne, nous avons du indiquer l'index
à utiliser dans la clause select.

Est-ce quelqu'un a constaté ce phénomène ? Des avis ?

Merci à tous.
Avatar
lionelp
Bonjour,

Il est très probable que lorsque la requête est envoyée
via VB6 elle l'est en tant que requête paramétrée alors
que via isqlw (l'analyseur de requêtes) elle ne l'est pas.

Si la requête est paramétrée (select ... where col=?)
alors SQL Server va utiliser les statistiques générales de
la table (valeurs de l'en-tête du DBCC show_statistics)
tandis que si elle ne l'est pas alors SQL Server va
utiliser les statistiques en détail par valeur de clé.
Une autre possibilité est qu'en VB on passe par un curseur
serveur (ou dynamique, ou keyset, ...) via les procédures
sp_***cursor.

Le mieux est de lancer une trace profiler avec tous les
évènements stored proc, tous SQL batch, plan d'exèc, ...

Cordialement,
LionelP

-----Message d'origine-----
Lorsque l'on exécute une requête sql dans l'analyseur de
requetes, le plan de maintenance indique quel index est
utilisé (plan d'exécution)

Nous avons remarqué que la même requête exécutée dans un
programme VB6 (SP5) n'utilisait pas le même index que
celui utilisé par l'analyseur de requête.

Pour que cela fonctionne, nous avons du indiquer l'index
à utiliser dans la clause select.

Est-ce quelqu'un a constaté ce phénomène ? Des avis ?

Merci à tous.
.



Avatar
Robert
Merci.

Juste une petite précision : la requête exécutée avec
l'analyseur ou avec VB6 contenait les même paramètres
dans la clause Where