Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Question de performance, quelle méthode choisir ?

2 réponses
Avatar
Denis P
Bonjour tout le monde,

Je suis actuellement à m'interroger sur quelle méthode adopter afin
d'obtenir les meilleures performances. Je suis en train de concevoir un
programme en Visual Basic qui se connecte avec ADO à SQL Server. Je dois
faire afficher une page contenant le contenu de plusieurs table relié entre
elles. Dans certains cas j'aurai environ une quinzaine de tables, mais dans
d'autre ce sera beaucoup plus. Pour expliquer le prinicipe voici un
exemple. Prenons le cas d'un employé. Un employé se retrouve dans une
table tblEmploye. Cet employé a une adresse dans la table tblEmpAdresse, un
ou plusieurs téléphones dans la table tblEmpTel, un ou plusieurs contacts
dans la table tblEmpCont et ces contacts ont eux aussi un ou plusieurs
téléphones et ainsi de suite pour ne pas m'éterniser.

Faire afficher toutes ces informations n'est pas un problème en soit, c'est
plutôt la meilleure méthode pour obtenir le maximum de performances qui me
fait poser des questions. Je pourrais créer une vue contenant toutes les
informations, mais là je me retrouverais avec je ne sais combien de
redondances à cause des multiples téléphones, des multiples contacts et des
multiples téléphones des contacts et ainsi de suite. Donc je ne crois pas
que ce soit la meilleure méthode. Ensuite je pourrais aussi faire la même
chose avec une procédure stockée, peut-être une amélioration de performance,
mais je ne crois pas que ce soit la meilleure encore. Je pourrais aussi
créer une vue avec les tables qui ne m'apportent pas de redondances pour
regourper certaines informations. Ou créer une procédure stockée qui ferait
la même chose.

Finalement il y a je ne sais combien de possibilité de procéder pour obtenir
les informations que je désire, mais il y a forcément des différences
notable de performance d'une méthode à l'autre. Par exemple est-ce plus
performant de créer une vue sur ma table tblEmploye et ma table
tblEmpAdresse qui ne m'apporte pas de redondances et d'ensuite interroger
cette vue par une procédure stockée pour obtenir le résultat souhaité, ou
est-ce plus performant de créer plutôt simplement une procédure stockée qui
interrogera directement ces 2 tables. Autre interrogation, une procédure
stocké qui appelle une autre procédure stocké est-elle plus rapide de 2
procédures stockées indépendante. L'appel de 2 procédures stockées
indépendantes demande évidemment plus de ressources sur le réseau, mais du
point de vue performance sur le serveur à quel niveau se situe la
différence. Une autre question que je me pose, une procédure stockée qui
récupère un seul enregistrement, par exemple va récupérer les données pour
un employé dans la table tblEmploye, peut-elle appelé une autre procédure
stockée qui elle va récupérer touts les téléphones de cet employé ? En
d'autres mots puis-je créer une procédure stockée qui appellera une autre
procédure stockée qui à son son tour appellera une autre procédure stockée
et ainsi de suite, même si certaines procédures stockées me retournent plus
d'un enregistrement ? Et si une procédure stockée retourne plus d'un
enregistrement, est-ce possible dans SQL Server de créer une boucle dans
laquelle s'effectuera l'appel d'une autre procédure stockée ?

Finalement ceux qui auront le courage de répondre à mes interrogations, je
vous remercie énormément à l'avance de prendre le temps de me répondre et
j'espère avoir été assez clair avec toutes ses questions.

Denis P

2 réponses

Avatar
Laurent Moreau
Je vais juste répondre a quelques points:

- il est possible dans une procédure stockée d'exécuter d'autres proc.

- Il est possible de faire une procédure stockée qui retourne plusieurs jeux
de résultats.
Pour les lire dans Vb par ADO, il faut utiliser la méthode NextRecordset
pour passer au jeu de résultat suivant.


Petite réflexion:
- Dans une procédure stockée, faire une seule requete avec toutes les
jointures et une réponse en XML me semble correspondre a ce que tu veux
faire. Mais je ne sais pas si les performances seraient bonnes.

Laurent.



"Denis P" wrote in message
news:
Bonjour tout le monde,

Je suis actuellement à m'interroger sur quelle méthode adopter afin
d'obtenir les meilleures performances. Je suis en train de concevoir un
programme en Visual Basic qui se connecte avec ADO à SQL Server. Je dois
faire afficher une page contenant le contenu de plusieurs table relié


entre
elles. Dans certains cas j'aurai environ une quinzaine de tables, mais


dans
d'autre ce sera beaucoup plus. Pour expliquer le prinicipe voici un
exemple. Prenons le cas d'un employé. Un employé se retrouve dans une
table tblEmploye. Cet employé a une adresse dans la table tblEmpAdresse,


un
ou plusieurs téléphones dans la table tblEmpTel, un ou plusieurs contacts
dans la table tblEmpCont et ces contacts ont eux aussi un ou plusieurs
téléphones et ainsi de suite pour ne pas m'éterniser.

Faire afficher toutes ces informations n'est pas un problème en soit,


c'est
plutôt la meilleure méthode pour obtenir le maximum de performances qui me
fait poser des questions. Je pourrais créer une vue contenant toutes les
informations, mais là je me retrouverais avec je ne sais combien de
redondances à cause des multiples téléphones, des multiples contacts et


des
multiples téléphones des contacts et ainsi de suite. Donc je ne crois pas
que ce soit la meilleure méthode. Ensuite je pourrais aussi faire la même
chose avec une procédure stockée, peut-être une amélioration de


performance,
mais je ne crois pas que ce soit la meilleure encore. Je pourrais aussi
créer une vue avec les tables qui ne m'apportent pas de redondances pour
regourper certaines informations. Ou créer une procédure stockée qui


ferait
la même chose.

Finalement il y a je ne sais combien de possibilité de procéder pour


obtenir
les informations que je désire, mais il y a forcément des différences
notable de performance d'une méthode à l'autre. Par exemple est-ce plus
performant de créer une vue sur ma table tblEmploye et ma table
tblEmpAdresse qui ne m'apporte pas de redondances et d'ensuite interroger
cette vue par une procédure stockée pour obtenir le résultat souhaité, ou
est-ce plus performant de créer plutôt simplement une procédure stockée


qui
interrogera directement ces 2 tables. Autre interrogation, une procédure
stocké qui appelle une autre procédure stocké est-elle plus rapide de 2
procédures stockées indépendante. L'appel de 2 procédures stockées
indépendantes demande évidemment plus de ressources sur le réseau, mais du
point de vue performance sur le serveur à quel niveau se situe la
différence. Une autre question que je me pose, une procédure stockée qui
récupère un seul enregistrement, par exemple va récupérer les données pour
un employé dans la table tblEmploye, peut-elle appelé une autre procédure
stockée qui elle va récupérer touts les téléphones de cet employé ? En
d'autres mots puis-je créer une procédure stockée qui appellera une autre
procédure stockée qui à son son tour appellera une autre procédure stockée
et ainsi de suite, même si certaines procédures stockées me retournent


plus
d'un enregistrement ? Et si une procédure stockée retourne plus d'un
enregistrement, est-ce possible dans SQL Server de créer une boucle dans
laquelle s'effectuera l'appel d'une autre procédure stockée ?

Finalement ceux qui auront le courage de répondre à mes interrogations, je
vous remercie énormément à l'avance de prendre le temps de me répondre et
j'espère avoir été assez clair avec toutes ses questions.

Denis P




Avatar
Fred BROUARD
les performances seront les meilleures à condition :
1) d'utiliser une requête et non des tables
2) de les joindre suivant le modèle relationnel (clef primaire <=> clef étrangère)
3) de limiter le nombre des colonnes (pas de SELECT * !)
4) de limiter le nombre de lignes (filtrage WHERE ou limitation par TOP n)

Maintenant le fait de mettre cela dans une SP ou dans un objet TQuery préparé ne
donnera pas de différence significative.

J'ai des requêtes qui ont plus de 30 tables avec une vingtaine de condition de filtrage et le temps d'exécution est
"invisible" pour un utilisateur lambda...

Mais de façon générale, pour les interfaces, la manière de synchroniser les informations est de faire autant de requête
que nécessaire pour chaque ligne "distinctifiable"...

Autrement dit : une requête pour l'employé, une autre pour tous ses n° de tel...
une autre pour tous ses contacts, une autre pour tous les tel du contact... etc.
Chaque requête étant déclanché par un événement sur la précédente avec le filtrage adéquat.

A +



Denis P a écrit:
Bonjour tout le monde,

Je suis actuellement à m'interroger sur quelle méthode adopter afin
d'obtenir les meilleures performances. Je suis en train de concevoir un
programme en Visual Basic qui se connecte avec ADO à SQL Server. Je dois
faire afficher une page contenant le contenu de plusieurs table relié entre
elles. Dans certains cas j'aurai environ une quinzaine de tables, mais dans
d'autre ce sera beaucoup plus. Pour expliquer le prinicipe voici un
exemple. Prenons le cas d'un employé. Un employé se retrouve dans une
table tblEmploye. Cet employé a une adresse dans la table tblEmpAdresse, un
ou plusieurs téléphones dans la table tblEmpTel, un ou plusieurs contacts
dans la table tblEmpCont et ces contacts ont eux aussi un ou plusieurs
téléphones et ainsi de suite pour ne pas m'éterniser.

Faire afficher toutes ces informations n'est pas un problème en soit, c'est
plutôt la meilleure méthode pour obtenir le maximum de performances qui me
fait poser des questions. Je pourrais créer une vue contenant toutes les
informations, mais là je me retrouverais avec je ne sais combien de
redondances à cause des multiples téléphones, des multiples contacts et des
multiples téléphones des contacts et ainsi de suite. Donc je ne crois pas
que ce soit la meilleure méthode. Ensuite je pourrais aussi faire la même
chose avec une procédure stockée, peut-être une amélioration de performance,
mais je ne crois pas que ce soit la meilleure encore. Je pourrais aussi
créer une vue avec les tables qui ne m'apportent pas de redondances pour
regourper certaines informations. Ou créer une procédure stockée qui ferait
la même chose.

Finalement il y a je ne sais combien de possibilité de procéder pour obtenir
les informations que je désire, mais il y a forcément des différences
notable de performance d'une méthode à l'autre. Par exemple est-ce plus
performant de créer une vue sur ma table tblEmploye et ma table
tblEmpAdresse qui ne m'apporte pas de redondances et d'ensuite interroger
cette vue par une procédure stockée pour obtenir le résultat souhaité, ou
est-ce plus performant de créer plutôt simplement une procédure stockée qui
interrogera directement ces 2 tables. Autre interrogation, une procédure
stocké qui appelle une autre procédure stocké est-elle plus rapide de 2
procédures stockées indépendante. L'appel de 2 procédures stockées
indépendantes demande évidemment plus de ressources sur le réseau, mais du
point de vue performance sur le serveur à quel niveau se situe la
différence. Une autre question que je me pose, une procédure stockée qui
récupère un seul enregistrement, par exemple va récupérer les données pour
un employé dans la table tblEmploye, peut-elle appelé une autre procédure
stockée qui elle va récupérer touts les téléphones de cet employé ? En
d'autres mots puis-je créer une procédure stockée qui appellera une autre
procédure stockée qui à son son tour appellera une autre procédure stockée
et ainsi de suite, même si certaines procédures stockées me retournent plus
d'un enregistrement ? Et si une procédure stockée retourne plus d'un
enregistrement, est-ce possible dans SQL Server de créer une boucle dans
laquelle s'effectuera l'appel d'une autre procédure stockée ?

Finalement ceux qui auront le courage de répondre à mes interrogations, je
vous remercie énormément à l'avance de prendre le temps de me répondre et
j'espère avoir été assez clair avec toutes ses questions.

Denis P





--
Frédéric BROUARD, MVP MS SQL Server. Expert Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************