Group By - Mysql: Comment eviter de faire plusieurs requetes ?

Group By - Mysql: Comment eviter de faire plusieurs requetes ? - SQL/NoSQL - Programmation

Marsh Posté le 20-08-2009 à 20:20:57    

Bonjour a tous,
 
Je voulais savoir s'il existe un moyen d'eviter de faire 5 groupy by different ?
 
En pratique j'ai une table avec plusieurs colonne: C1, C2, C3, ..., C10
 
Et j'ai plusieurs requete
 
SELECT C1, COUNT(C1) FROM BASE1 GROUP BY C1;
SELECT C2, COUNT(C2) FROM BASE1 GROUP BY C2;
SELECT C3, COUNT(C3) FROM BASE1 GROUP BY C3;
 
Il y a t-il un moyen d'eviter de faire plusieurs requetes et donc de limiter dans un soucis de performances les acces repeter a la table...
 
Merci de votre aide.
 
Cordialement,
 
Matt


---------------
Dell XPS 1330 M - T9300 - 4Go - 250Go 7200 tr - LED - 8400 Gs /// Custom - P4 935D - 2Go - 500Go 7200 tr - 7600 Gs - Asus 19"
Reply

Marsh Posté le 20-08-2009 à 20:20:57   

Reply

Marsh Posté le 20-08-2009 à 21:29:58    

Avec UNION?


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 21-08-2009 à 08:06:00    

a voir si ca existe en mysql, mais en oracle il y a moyen de faire des rollup/cube qui permettent d'avoir des sous-totaux/totaux en une seule requête.
Donc a voir dans la doc de ton sgbd

Reply

Marsh Posté le 21-08-2009 à 13:34:38    

Je me sens un peu con du coup :(  
 
Oui UNION ca marche, je comprends pas comment j ai fait pour pas y penser. Il faudrait que je recule de mon ecran des fois :)
 
J'ai donc fait des UNIONS et rajouter une colonne avec le numero de ma requete pour pouvoir traiter plus rapidement les donnes par la suite
 
SELECT 'Requete1', C1, C2, ... FROM Table Where [...])
UNION  
SELECT ' Requete2'. ...
 
Etc..
 
Merci bcp a tous.
 
Pour conclure je ne vois pas de grosse amelioration au niveau des perf. C'est tres equivalent. Mais au moins je ne fais pas 3 ou 4 acces a la base.
 
Cordialement,
 
Matt


---------------
Dell XPS 1330 M - T9300 - 4Go - 250Go 7200 tr - LED - 8400 Gs /// Custom - P4 935D - 2Go - 500Go 7200 tr - 7600 Gs - Asus 19"
Reply

Marsh Posté le 21-08-2009 à 14:13:31    

j'ai l'impression qu'on doit pouvoir optimiser plus qu'avec des unions (les unions permettent d'avoir un seul accès, mais au niveau plan ca fait quand même 3 requetes), mais par contre faudrait détailler un peu ta requête pour ca...

Reply

Marsh Posté le 21-08-2009 à 14:16:51    

Coucou !
 
Ta recherche d'opti ressemble quelque peu à la mienne, ici :
http://forum.hardware.fr/hfr/Progr [...] 4964_1.htm
Je t'entraine peut-être sur une fausse piste quoique j'espère pas, mais si dans MySQL tu peux faire des curseurs (ce que j'ignore) ça peut être une piste à explorer ...
 
Ca vaut ce que ça vaut, passe pas trop de temps sur cette piste quand même ... ;)
 
Nrv

Reply

Marsh Posté le 21-08-2009 à 14:17:33    

Vu les requêtes, je pense pas qu'il pourra passer outre un tel plan. L'union est la solution la plus simple à mon avis.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 21-08-2009 à 14:22:13    

S'il faut une requête globale de sa table pour toutes les valeurs de Cxx, qu'il la met en cache, et qu'ensuite il fait ses requêtes à partir des données en cache, il sauvegarde pas mal les accès base (un seul accès à la base via une seule requête rapatriant toutes les données nécessaires à ces requêtes sur Cxx).
Les requêtes pour chaque Cxx ne couterons alors que du temps machine.
 
J'ai pitêtre pas été clair dsl ;) Et là je parle en Oracle, jamais fait de MySQL, y'a peut-être un équivalent, je ne sais pas.
 
Nrv ;)

Reply

Marsh Posté le 21-08-2009 à 18:52:46    

nrv_from_cnr  
 
> je vois ce que tu veux dire :)
 
Je n'ai pour l'instant pas trop de donnes sur cette base donc ca devrait aller avec les UNION. Mais je teste bientot sur une base de 2.5 Millions j'imagine que je verrai surement une difference dans ce cas ;)


---------------
Dell XPS 1330 M - T9300 - 4Go - 250Go 7200 tr - LED - 8400 Gs /// Custom - P4 935D - 2Go - 500Go 7200 tr - 7600 Gs - Asus 19"
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed