Group By - Mysql: Comment eviter de faire plusieurs requetes ? - SQL/NoSQL - Programmation
Marsh Posté le 20-08-2009 à 21:29:58
Avec UNION?
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
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
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...
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
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.
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
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
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"