Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/11/2010, 10h00   #1
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 277
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 277
Points : 2 323
Points : 2 323
Par défaut optimisation de requête

Bonjour,

est il possible de simplifier une requête telle que la suivante ?

Code sql :
1
2
3
4
 
SELECT A/B AS C, c1, c2, c3, c4, c5, c6 FROM
   (SELECT SUM(c1*c2) AS A, SUM(c3) AS B, c1, c2, c3, c4, c5, c6 
    FROM uneTable) AS regroupement

la double sélection des champs 1 à 6 est-elle optimisée par MySQL ?

Merci
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2010, 22h34   #2
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
Je dirai que tu es en train de te faire berner par le côté laxiste de mysql. Dans la requete qui suivante, tu mélanges des colonnes agrégées et des colonnes non agrégées, c'est interdit sur tous les autres sgbd. Mysql l'autorise mais prévient que si les colonnes non agrégées ne sont pas constantes dans les groupes, le résultat est imprévisible.

bon maintenant explain me dit que cette forme produit une table dérivée alors que l'autre, sans la sous requete non, toutefois une table dérivée qui contient une seule ligne ... (et dans tous les cas qui ne contiendra jamais qu'une seule ligne).

si la question c'est est-ce que le calcul SUM() est mis en cache ou il faut truander comme tu le fais pour ne pas faire les sommes plusieurs fois de suite, je pense que oui, il y a cache, mais je n'ai aucun argument pour le justifier. J'en cherche aussi.
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2010, 22h44   #3
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 277
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 277
Points : 2 323
Points : 2 323
Ok merci pour cette explication.
Dans ce cas de figure, comment ferais tu la requête (sous MySQL) ?
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2010, 11h37   #4
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 528
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

Informations professionnelles :
Activité : Retraité
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : novembre 2005
Messages : 2 528
Points : 3 519
Points : 3 519
Saluton,
Nous manquons d'éléments pour lever l'incertitude rappelée par gene69 à savoir:
Citation:
si les colonnes non agrégées ne sont pas constantes dans les groupes, le résultat est imprévisible.
d'autant qu'en l'absence de GROUP BY le regroupement va se faire sur l'ensemble des lignes de la table.
La cohérence de cette requête n'apparaît pas démontrée a priori.
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
articles : Comment émuler un tableau croisé [quasi] dynamique
et : Une énigme mathématique résolue avec MySQL
recommande l'utilisation de PDO (PHP5 Data Objects)
Maljuna Kris est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h24.


 
 
 
 
Partenaires

Hébergement Web