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 ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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.
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" <anonymous@discussions.microsoft.com> a écrit dans le message de
news:3d4301c49fe6$797a7720$a301280a@phx.gbl...
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 ?
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.
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. .
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 ?
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. .
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
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