OVH Cloud OVH Cloud

Urgent ! : Question sur les sous requêtes et les performances ?

4 réponses
Avatar
News Groups
Bonjour à tous,

Pourrais je avoir vos lumières ?!
Je cherche a savoir à quel niveau il est préférable de faire des mises en
forme de texte (concaténation) dans le cas de requêtes imbriquées, et ce en
terme de performance notamment ?

Voici un exemple simplifié :
Soit les tables :
Affaire (Numero,IDaffaire,IDContrat) : une affaire comporte 1 ou plusieurs
contrats
Contrat (IDContrat,IDclient) : un contrat porte sur 1 ou plusieurs clients
Client (IDClient,Nom,Prenom) : un client a un nom et un prénom

pour obtenir par exemple cela :
Numero NomClient
-------------------------------------------------- --------------------
A001 Dupont Toto
A001 Durand Pascal
B020 Aribo Lucien

- vaut-il mieux concaténer les champs Nom,Prenom dans la sous requête ? :
SELECT Affaire.Numero, A.NomClient
FROM Affaire
INNER JOIN (SELECT Contrat.IDcontrat, (Client.Nom + ' ' + Client.Prenom)
AS 'NomClient'
FROM Contrat INNER JOIN Client ON (Contrat.IDclient =
Client.IDclient)) AS A
ON (Affaire.IDcontrat = A.IDcontrat)

- ou bien dans la selection finale ? :
SELECT Affaire.Numero, (A.Nom + ' ' + A.Prenom) AS 'NomClient'
FROM Affaire
INNER JOIN (SELECT Contrat.IDcontrat, Client.Nom, Client.Prenom
FROM Contrat INNER JOIN Client ON (Contrat.IDclient =
Client.IDclient)) AS A
ON (Affaire.IDcontrat = A.IDcontrat)

Merci de votre expérience,
@+

Thierry.

4 réponses

Avatar
News Groups
Suite à quelques test avec des plans d'executions,
apparemment cela ne fait aucune différence dans le traitement de la requête
:
la concaténation, se fait avant le select final dans les deux cas !

Mais j'aimerais tout de même avoir l'avis des experts !
merci encore,
Thierry.


"News Groups" a écrit dans le message de news:
412b0da4$0$5262$
Bonjour à tous,

Pourrais je avoir vos lumières ?!
Je cherche a savoir à quel niveau il est préférable de faire des mises en
forme de texte (concaténation) dans le cas de requêtes imbriquées, et ce


en
terme de performance notamment ?

Voici un exemple simplifié :
Soit les tables :
Affaire (Numero,IDaffaire,IDContrat) : une affaire comporte 1 ou plusieurs
contrats
Contrat (IDContrat,IDclient) : un contrat porte sur 1 ou plusieurs clients
Client (IDClient,Nom,Prenom) : un client a un nom et un prénom

pour obtenir par exemple cela :
Numero NomClient
-------------------------------------------------- --------------------
A001 Dupont Toto
A001 Durand Pascal
B020 Aribo Lucien

- vaut-il mieux concaténer les champs Nom,Prenom dans la sous requête ? :
SELECT Affaire.Numero, A.NomClient
FROM Affaire
INNER JOIN (SELECT Contrat.IDcontrat, (Client.Nom + ' ' +


Client.Prenom)
AS 'NomClient'
FROM Contrat INNER JOIN Client ON (Contrat.IDclient > Client.IDclient)) AS A
ON (Affaire.IDcontrat = A.IDcontrat)

- ou bien dans la selection finale ? :
SELECT Affaire.Numero, (A.Nom + ' ' + A.Prenom) AS 'NomClient'
FROM Affaire
INNER JOIN (SELECT Contrat.IDcontrat, Client.Nom, Client.Prenom
FROM Contrat INNER JOIN Client ON (Contrat.IDclient > Client.IDclient)) AS A
ON (Affaire.IDcontrat = A.IDcontrat)

Merci de votre expérience,
@+

Thierry.






Avatar
Fred BROUARD
bonjour,

si tu veux des perfomances, il ne faut faire ni l'un ni l'autre, car il s'agit
de présentation et non de restitution de données.

SQL est fait pour restituer des données. Ton appli pour les présenter. Donc, à
faire dans ton application !!!

A lire sur le sujet :
http://sqlpro.developpez.com/SQL_AZ_E.html#Cosmos

A +

News Groups a écrit:
Bonjour à tous,

Pourrais je avoir vos lumières ?!
Je cherche a savoir à quel niveau il est préférable de faire des mises en
forme de texte (concaténation) dans le cas de requêtes imbriquées, et ce en
terme de performance notamment ?

Voici un exemple simplifié :
Soit les tables :
Affaire (Numero,IDaffaire,IDContrat) : une affaire comporte 1 ou plusieurs
contrats
Contrat (IDContrat,IDclient) : un contrat porte sur 1 ou plusieurs clients
Client (IDClient,Nom,Prenom) : un client a un nom et un prénom

pour obtenir par exemple cela :
Numero NomClient
-------------------------------------------------- --------------------
A001 Dupont Toto
A001 Durand Pascal
B020 Aribo Lucien

- vaut-il mieux concaténer les champs Nom,Prenom dans la sous requête ? :
SELECT Affaire.Numero, A.NomClient
FROM Affaire
INNER JOIN (SELECT Contrat.IDcontrat, (Client.Nom + ' ' + Client.Prenom)
AS 'NomClient'
FROM Contrat INNER JOIN Client ON (Contrat.IDclient > Client.IDclient)) AS A
ON (Affaire.IDcontrat = A.IDcontrat)

- ou bien dans la selection finale ? :
SELECT Affaire.Numero, (A.Nom + ' ' + A.Prenom) AS 'NomClient'
FROM Affaire
INNER JOIN (SELECT Contrat.IDcontrat, Client.Nom, Client.Prenom
FROM Contrat INNER JOIN Client ON (Contrat.IDclient > Client.IDclient)) AS A
ON (Affaire.IDcontrat = A.IDcontrat)

Merci de votre expérience,
@+

Thierry.







--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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 *************************
Avatar
News Groups
Merci de la précision
et au passage (sans flaterie mal placée) merci pour ton site et de la
rigueur qui en découle sur le standard SQL
c'est une trés bonne base d'apprentissage et du bon savoir faire pour des
débutants comme moi.

Quant à ma demande précédente, je ne peux effectivement aller que dans ton
sens, mais cela me pose le cas suivant :
Si ma requête est utlisée comme source de plusieurs états dans access* et si
la mise en forme "Nom Prénom" change par exemple en "Nom - Prénom" il parait
plus immédiat de changer la mise en forme à la source : (Client.Nom + '- ' +
Client.Prenom) AS 'NomClient' que de modifier chaque état, non ??, c'est
tout le problème de la limite de traitement entre les données et
l'applicatif en fonction des perfs / de la souplesse de changement ...

J'ai peut-être dis une énormité, mais justement j'attends ton avis pour
améliorer cela.

Merci encore,
Thierry.
notes :
*je sais Access n'est pas le meilleur exemple! mais là il n'est utilisé que
comme interface, précision : Projet ADP + SQL Server via OLE DB


"Fred BROUARD" a écrit dans le message de news:

bonjour,

si tu veux des perfomances, il ne faut faire ni l'un ni l'autre, car il


s'agit
de présentation et non de restitution de données.

SQL est fait pour restituer des données. Ton appli pour les présenter.


Donc, à
faire dans ton application !!!

A lire sur le sujet :
http://sqlpro.developpez.com/SQL_AZ_E.html#Cosmos

A +

News Groups a écrit:
> Bonjour à tous,
>
> Pourrais je avoir vos lumières ?!
> Je cherche a savoir à quel niveau il est préférable de faire des mises


en
> forme de texte (concaténation) dans le cas de requêtes imbriquées, et ce


en
> terme de performance notamment ?
>
> Voici un exemple simplifié :
> Soit les tables :
> Affaire (Numero,IDaffaire,IDContrat) : une affaire comporte 1 ou


plusieurs
> contrats
> Contrat (IDContrat,IDclient) : un contrat porte sur 1 ou plusieurs


clients
> Client (IDClient,Nom,Prenom) : un client a un nom et un prénom
>
> pour obtenir par exemple cela :
> Numero NomClient
> -------------------------------------------------- --------------------
> A001 Dupont Toto
> A001 Durand Pascal
> B020 Aribo Lucien
>
> - vaut-il mieux concaténer les champs Nom,Prenom dans la sous requête ?


:
> SELECT Affaire.Numero, A.NomClient
> FROM Affaire
> INNER JOIN (SELECT Contrat.IDcontrat, (Client.Nom + ' ' +


Client.Prenom)
> AS 'NomClient'
> FROM Contrat INNER JOIN Client ON (Contrat.IDclient > > Client.IDclient)) AS A
> ON (Affaire.IDcontrat = A.IDcontrat)
>
> - ou bien dans la selection finale ? :
> SELECT Affaire.Numero, (A.Nom + ' ' + A.Prenom) AS 'NomClient'
> FROM Affaire
> INNER JOIN (SELECT Contrat.IDcontrat, Client.Nom, Client.Prenom
> FROM Contrat INNER JOIN Client ON (Contrat.IDclient > > Client.IDclient)) AS A
> ON (Affaire.IDcontrat = A.IDcontrat)
>
> Merci de votre expérience,
> @+
>
> Thierry.
>
>
>
>

--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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 *************************



Avatar
Fred BROUARD
les états permettent de faire des fonctions basiques dans des colonnes, commes
la concaténation des littaraux. Donc à faire dans la construction de l'état, pas
dans le SQL.

Soit tu veut des perf, soit tu veut du confort, c'est généralement anti nomique.
Les porsche ne sont pas considérées comme tres confortables... Les rolls ne sont
pas considérées comme très performantes...

A +

News Groups a écrit:
Merci de la précision
et au passage (sans flaterie mal placée) merci pour ton site et de la
rigueur qui en découle sur le standard SQL
c'est une trés bonne base d'apprentissage et du bon savoir faire pour des
débutants comme moi.

Quant à ma demande précédente, je ne peux effectivement aller que dans ton
sens, mais cela me pose le cas suivant :
Si ma requête est utlisée comme source de plusieurs états dans access* et si
la mise en forme "Nom Prénom" change par exemple en "Nom - Prénom" il parait
plus immédiat de changer la mise en forme à la source : (Client.Nom + '- ' +
Client.Prenom) AS 'NomClient' que de modifier chaque état, non ??, c'est
tout le problème de la limite de traitement entre les données et
l'applicatif en fonction des perfs / de la souplesse de changement ...

J'ai peut-être dis une énormité, mais justement j'attends ton avis pour
améliorer cela.

Merci encore,
Thierry.
notes :
*je sais Access n'est pas le meilleur exemple! mais là il n'est utilisé que
comme interface, précision : Projet ADP + SQL Server via OLE DB


"Fred BROUARD" a écrit dans le message de news:


bonjour,

si tu veux des perfomances, il ne faut faire ni l'un ni l'autre, car il



s'agit

de présentation et non de restitution de données.

SQL est fait pour restituer des données. Ton appli pour les présenter.



Donc, à

faire dans ton application !!!

A lire sur le sujet :
http://sqlpro.developpez.com/SQL_AZ_E.html#Cosmos

A +

News Groups a écrit:

Bonjour à tous,

Pourrais je avoir vos lumières ?!
Je cherche a savoir à quel niveau il est préférable de faire des mises





en

forme de texte (concaténation) dans le cas de requêtes imbriquées, et ce





en

terme de performance notamment ?

Voici un exemple simplifié :
Soit les tables :
Affaire (Numero,IDaffaire,IDContrat) : une affaire comporte 1 ou





plusieurs

contrats
Contrat (IDContrat,IDclient) : un contrat porte sur 1 ou plusieurs





clients

Client (IDClient,Nom,Prenom) : un client a un nom et un prénom

pour obtenir par exemple cela :
Numero NomClient
-------------------------------------------------- --------------------
A001 Dupont Toto
A001 Durand Pascal
B020 Aribo Lucien

- vaut-il mieux concaténer les champs Nom,Prenom dans la sous requête ?





:

SELECT Affaire.Numero, A.NomClient
FROM Affaire
INNER JOIN (SELECT Contrat.IDcontrat, (Client.Nom + ' ' +





Client.Prenom)

AS 'NomClient'
FROM Contrat INNER JOIN Client ON (Contrat.IDclient >>>Client.IDclient)) AS A
ON (Affaire.IDcontrat = A.IDcontrat)

- ou bien dans la selection finale ? :
SELECT Affaire.Numero, (A.Nom + ' ' + A.Prenom) AS 'NomClient'
FROM Affaire
INNER JOIN (SELECT Contrat.IDcontrat, Client.Nom, Client.Prenom
FROM Contrat INNER JOIN Client ON (Contrat.IDclient >>>Client.IDclient)) AS A
ON (Affaire.IDcontrat = A.IDcontrat)

Merci de votre expérience,
@+

Thierry.







--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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 *************************









--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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 *************************