Probleme de rapidite sur un select
Le
Michel Drot
Bonjour a tous,
J'essaie de minimiser le temps d'execution d'une procedure stockee qui met a
jour des tables apres verification des donnees et ai constate que le temps
d'execution etait tres rallonge a cause d'un select.
Soit
une table contenant environ 100000 lignes avec une cle primaire sur
A+B+C
une procedure stockee qui contient un ordre select.
Un script execute la procedure stockee, et je teste la rapidite d'execution
du select dans plusieurs cas.
Si le select contient toute la cle primaire
select @champs1=champs1 from table where A=@A , B=@B,C=@C , j'obtiens un
temps d'execution de 300millisecondes
Si le select ne contient pas toute la cle primaire
select @champs1=champs1 from table where A=@A , B=@B, (sans mettre tous
les champs de l'indexe) j'obtiens 130 millisecondes
Je ne comprends pas pourquoi le temps d'execution est reduit de moitie
lorsque je n'instruis pas tous les champs de la cle primaire.
Il me semble que cela devrait etre l'inverse
De plus si j'execute le select directement dans le script (sans l'appeler
dans une procedure stockee) j'obtiens un temps d'execution de 20ms
Je ne comprends pas un tel ecart de performance.
Quequ'un a t il une explication ou n debut d'explication?
En vous remerciant d'avance pour votre aide.
Meilleures salutations
J'essaie de minimiser le temps d'execution d'une procedure stockee qui met a
jour des tables apres verification des donnees et ai constate que le temps
d'execution etait tres rallonge a cause d'un select.
Soit
une table contenant environ 100000 lignes avec une cle primaire sur
A+B+C
une procedure stockee qui contient un ordre select.
Un script execute la procedure stockee, et je teste la rapidite d'execution
du select dans plusieurs cas.
Si le select contient toute la cle primaire
select @champs1=champs1 from table where A=@A , B=@B,C=@C , j'obtiens un
temps d'execution de 300millisecondes
Si le select ne contient pas toute la cle primaire
select @champs1=champs1 from table where A=@A , B=@B, (sans mettre tous
les champs de l'indexe) j'obtiens 130 millisecondes
Je ne comprends pas pourquoi le temps d'execution est reduit de moitie
lorsque je n'instruis pas tous les champs de la cle primaire.
Il me semble que cela devrait etre l'inverse
De plus si j'execute le select directement dans le script (sans l'appeler
dans une procedure stockee) j'obtiens un temps d'execution de 20ms
Je ne comprends pas un tel ecart de performance.
Quequ'un a t il une explication ou n debut d'explication?
En vous remerciant d'avance pour votre aide.
Meilleures salutations

Poser une question


Il y a plus de travail à faire pour lire 3 données que 2 !
Donc parfaitement logique
Postez votre Proc Stoc
A +
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
met a
temps
d'execution
j'obtiens un
tous
L'essai que j'ai fait ne confirme pas cela
Voici les resultats que j'obtiens
1) Temps avec codecinema noseance et tarif 300 (avec 3 donnees de
la cle primaire)
2) Temps avec noseance et tarif 140 (avec 2 donnees)
3) Temps avec codecinema noseance et tarif 2eme recherche 333 (avec
3 donnees de la cle primaire)
4) Temps avec noseance tarif et prix 140 (avec 3 donnees dont une ne
faisant pas partie de la cle primaire)
Ci joint.
Merci pour votre reponse
????? rien !!!
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************