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.
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
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
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" <denispronovostNospam@sympatico.ca> wrote in message
news:umLM96nREHA.2976@TK2MSFTNGP10.phx.gbl...
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.
- 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
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 *************************
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 *************************
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 *************************