Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1601 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Optimisation Mysql] Qui peut m'aider ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Optimisation Mysql] Qui peut m'aider ?

n°154489
Stligar
Posté le 08-06-2002 à 20:19:57  profilanswer
 

Bonjour,
 
J'suis pas un grand codeur et j'ai bcp de mal à trouver sur le web de la doc detaillée pour bien optimiser certaine requete et surtout celle qui va suivre.  
 
Il s'agit de trier les infos d'une base de donnée contenant plus de 15000 noms. Ce que j'ai code c'est une requete tous ce qui se fait de plus bourrin car je ne sais pas vraiment faire autrement :) et evidemment elle est extrement longue à s'executer. Bref si vous pouviez me dire comment et surtout quelles commandes utiliser pour optimiser tout cela
 

Code :
  1. <?
  2. $res_m=mysql_db_query("$base","select * from user order by id",$db_link);
  3. $nb_m=mysql_num_rows($res_m);
  4. $i=0;
  5. $id=0;
  6. $agemoinsde25=0;
  7. $agemoinsde15=0;
  8. $agemoinsde35=0;
  9. $ageplusde35=0;
  10. /* boucle qui cherche dans la table tant que le nb maxi d'inscrits n'est pas atteint */
  11. while ($i<$nb_m)
  12. {
  13. $id=mysql_result($res_m,$i,id);
  14. $age=mysql_result($res_m,$i,age);
  15. $metier=mysql_result($res_m,$i,metier);
  16. $sexe=mysql_result($res_m,$i,sexe);
  17. // Age
  18. if ($age > 87 ) $agemoinsde15++;
  19. elseif ($age > 77 && $age <= 87) $agemoinsde25++;
  20. elseif ($age > 67 && $age <= 77) $agemoinsde35++;
  21. elseif ($age <= 67) $ageplusde35++;
  22. // Metier
  23. if ($metier==1) $metier1++;
  24. elseif ($metier==2) $metier2++;
  25. elseif ($metier==3) $metier3++;
  26. elseif ($metier==4) $metier4++;
  27. elseif ($metier==5) $metier5++;
  28. elseif ($metier==6) $metier6++;
  29. elseif ($metier==7) $metier7++;
  30. elseif ($metier==8) $metier8++;
  31. elseif ($metier==9) $metier9++;
  32. elseif ($metier==10) $metier10++;
  33. elseif ($metier==11) $metier11++;
  34. //Sexe
  35. if ($sexe==M) $homme++;
  36. else $femme++;
  37. ++$i;
  38. $id++;
  39. }
  40. ?>


 
Voila merci d'avance pour ceux qui m'aideront


Message édité par Stligar le 06-08-2002 à 20:29:58
mood
Publicité
Posté le 08-06-2002 à 20:19:57  profilanswer
 

n°154502
zion
Plop
Posté le 08-06-2002 à 20:26:29  profilanswer
 

Euh, ou qu'elle est ta requête?
 
Sinon, rajoute un index sur le champs que tu dois trier, et ca ira mieux  ;)


---------------
Informaticien.be - Lancez des défis à vos amis
n°154506
Stligar
Posté le 08-06-2002 à 20:30:00  profilanswer
 

Toutes les infos sont sur la meme table donc l'index je suis pas sur que cela change qq. chose ( à mons que je n'ia pas tout compris a l'index :)
 
j'ai fait l'edit pour la requete

n°154510
zion
Plop
Posté le 08-06-2002 à 20:33:57  profilanswer
 

Stligar a écrit a écrit :

Toutes les infos sont sur la meme table donc l'index je suis pas sur que cela change qq. chose ( à mons que je n'ia pas tout compris a l'index :)
 
j'ai fait l'edit pour la requete  




 
En effet t'as pas compris pour l'index, rajoute un index sur id si il y en a pas.
 
Mais je pige pas pourquoi tu le tries vu que tu prends tout après  :heink:


---------------
Informaticien.be - Lancez des défis à vos amis
n°154512
Stligar
Posté le 08-06-2002 à 20:36:08  profilanswer
 

L'index sur Id il est mis depuis le debut (une habitude  :) )
 
Sinon pour le tri je le fais car comme je l'ai dit au debut je n'y connais pas grand chose et c'est le seul truc que je connais pour recuperer des infos dans la base

n°154516
zion
Plop
Posté le 08-06-2002 à 20:41:39  profilanswer
 

Stligar a écrit a écrit :

Sinon pour le tri je le fais car comme je l'ai dit au debut je n'y connais pas grand chose et c'est le seul truc que je connais pour recuperer des infos dans la base  




 
 :heink:  
 
select * from user  
 
c'est pas mal non plus  :D


---------------
Informaticien.be - Lancez des défis à vos amis
n°154526
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 08-06-2002 à 20:53:24  profilanswer
 

tu peux expliquer rapidement ce que tu veux faire, ca me lourde de lire le code là :D


Message édité par joce le 06-08-2002 à 20:53:30
n°154529
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 08-06-2002 à 20:57:08  profilanswer
 

(et accessoirement j'essaie de comprendre pourquoi il colore la moitié des if / elseif :p)

n°154531
zion
Plop
Posté le 08-06-2002 à 20:57:31  profilanswer
 

Il veux avoir le nombre de femmes/hommes, les métiers et le nombre de gens qui ont 0-15ans, 15-25ans, 25-35 et +35
 
C vrai qu'il y a mieux que le bête select et de faire les stats à la main, mais bon, deja si il trie faut un index et ici faut pas trier  :sarcastic:


---------------
Informaticien.be - Lancez des défis à vos amis
n°154536
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 08-06-2002 à 21:01:51  profilanswer
 

ba :
 
select COUNT(*) from user WHERE age > 87;
select COUNT(*) from user WHERE age > 77 AND age <= 87;
select COUNT(*) from user WHERE age > 67 AND age <= 77;
select COUNT(*) from user WHERE age <= 67;
 
 
select COUNT(*) FROM user GROUP BY metier;
 
select COUNT(*) FROM user GROUP BY sexe;
 
tu fous un index sur :
 
age
metier
sexe
 
et rulez :)


Message édité par joce le 06-08-2002 à 21:02:54
mood
Publicité
Posté le 08-06-2002 à 21:01:51  profilanswer
 

n°154537
HappyHarry
Posté le 08-06-2002 à 21:02:51  profilanswer
 

joce a écrit a écrit :

ba :
 
select COUNT(*) from user WHERE age > 87;
select COUNT(*) from user WHERE age > 77 AND age <= 87;
select COUNT(*) from user WHERE age <= 67;
 
 
select COUNT(*) FROM user GROUP BY metier;
 
select COUNT(*) FROM user GROUP BY sexe;
 
tu fous un index sur :
 
age
metier
sexe
 
et rulez :)  




 
mets en place la wordlist pour java au lieu de faire du sql  ;)

n°154538
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 08-06-2002 à 21:03:17  profilanswer
 

faut déjà que je débugge la wordlist actuelle :p

n°154540
zion
Plop
Posté le 08-06-2002 à 21:04:03  profilanswer
 

joce a écrit a écrit :

faut déjà que je débugge la wordlist actuelle :p  




 
Si y avait que ca  :sarcastic:


---------------
Informaticien.be - Lancez des défis à vos amis
n°154542
Stligar
Posté le 08-06-2002 à 21:05:37  profilanswer
 

Ok merci pour reponses vais potasser ça :)

n°154551
zion
Plop
Posté le 08-06-2002 à 21:10:33  profilanswer
 

http://www.phpinfo.net/?p=articles [...] tion-mysql
 
Lis cet article, y a des trucs intéressants  ;)


---------------
Informaticien.be - Lancez des défis à vos amis
n°154558
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 08-06-2002 à 21:17:31  profilanswer
 

excellent article :)

n°154559
Stligar
Posté le 08-06-2002 à 21:19:14  profilanswer
 

Ok merchi

n°154563
zion
Plop
Posté le 08-06-2002 à 21:25:08  profilanswer
 

joce a écrit a écrit :

excellent article :)  




 
Ouai mais il a fallu crier, il persistait qu'il savait créer une clé primaire pour +de 4 milliards d'éléments sur 3 bits  :pt1cable:  
 
Et bon, son histoire sur le null j'aime pas vraiment :/


---------------
Informaticien.be - Lancez des défis à vos amis
n°154565
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 08-06-2002 à 21:27:35  profilanswer
 

Zion a écrit a écrit :

 
 
Ouai mais il a fallu crier, il persistait qu'il savait créer une clé primaire pour +de 4 milliards d'éléments sur 3 bits  :pt1cable:  
 
Et bon, son histoire sur le null j'aime pas vraiment :/  




perso j'utilise pas les null, mais c'est vrai qu'il faut le voir du coté MySQL : faire une requète WHERE truc IS NULL n'a pas le même sens que WHERE truc='0'; (et ne renvoie pas les mêmes resultats ...)

n°154572
siewn
Posté le 08-06-2002 à 21:44:16  profilanswer
 

mais sinon le conseil d'émuler les champ boolean en faisant un char(0) qui est soit '' soit null, c bon ou y'a une autre méthode ?

n°154589
Stligar
Posté le 08-06-2002 à 22:26:17  profilanswer
 

joce a écrit a écrit :

ba :
 
select COUNT(*) from user WHERE age > 87;
select COUNT(*) from user WHERE age > 77 AND age <= 87;
select COUNT(*) from user WHERE age > 67 AND age <= 77;
select COUNT(*) from user WHERE age <= 67;
 
 
select COUNT(*) FROM user GROUP BY metier;
 
select COUNT(*) FROM user GROUP BY sexe;




 
Coucou c'est remoi :)
 
J'ai avancé mais j'ai du mal avec les GROUP BY, j'arrive pas à recuperer toutes les valeurs, voila ce que je fais :
 

Code :
  1. $req=mysql_query("select COUNT(*) FROM user GROUP BY metier" );
  2. $metier=mysql_fetch_array($req);
  3. $metier1=$metier[0]; // celui la marche  
  4. $metier2=$metier[1]; // a partir de la j'ai plus de valeur


 
Ou ai je fait une erreur ?
Merci


Message édité par Stligar le 06-08-2002 à 22:26:52
n°154593
zion
Plop
Posté le 08-06-2002 à 22:30:45  profilanswer
 

Faudrait ptre refaire un mysql_fetch_array, ca irait mieux


---------------
Informaticien.be - Lancez des défis à vos amis
n°154596
mrbebert
Posté le 08-06-2002 à 22:33:53  profilanswer
 

mysql_fetch_array te renvoie UNE ligne (le tableau représentant toutes les cases de cette ligne). Donc faut boucler. Si tu rajoutes 'metier' dans le SELECT :
 
while ($array = mysql_fetch_array($req)) {
  // traitement pour un métier
  echo "il y a " . $array["count(*)"] . " personnes qui font le metier " . $array["metier"] . "<br>";
}


Message édité par mrbebert le 06-08-2002 à 22:36:25
n°154604
Stligar
Posté le 08-06-2002 à 22:42:19  profilanswer
 

Merci beaucoup pour les commentaires ... j'y retourne :)

n°154605
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 08-06-2002 à 22:44:02  profilanswer
 

et puis si t'utilises $metier[0] autant utiliser mysql_fetch_row

n°154638
Stligar
Posté le 08-06-2002 à 23:14:48  profilanswer
 

Bon ben merci à tous, maitenant ça marche mille fois mieux ... Y a pas à dire j'utilisais vraiment une methode de bourrin ! :D

n°154652
246tNt
Resistance is futile
Posté le 08-06-2002 à 23:43:37  profilanswer
 

Vaut toujours mieux laisser le travail au serveur de base de donnée ... Ils sont doté de query-ptimizer et de different truc d'optimisation qui font le boulot pour toi.

n°154670
Stligar
Posté le 09-06-2002 à 00:00:57  profilanswer
 

Vi mais moi j'ai pas accés au commande du serveur de BDD :)


Message édité par Stligar le 06-09-2002 à 00:01:33
n°154820
246tNt
Resistance is futile
Posté le 09-06-2002 à 08:25:36  profilanswer
 

Ce que je voulait dire c qu'il vaut mieux faire plusieurs
SELECT COUNT(*) FROM ... WHERE ...;
que de faire un SELECT * FROM ...;
et puis de compter toi meme les different trucs.

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Optimisation Mysql] Qui peut m'aider ?

 

Sujets relatifs
[MySQL] Requête UPDATE...[PHP / MySQL] erreur, je comprends pas :(
[PHP/MySQL] Sh@ardar --> ton histoire de CONCAT() en MySQL[MySQL] varchar ou tinytext (ou tinyblob) ?
JDBC MYSQLMySQL - PostgreSQL : l'intérêt du relationnel ?
[ SGBD ] Différence entre PostgreSQL et MySQL ?mySQL pb de rapidite
[MYSQL] Pourquoi cette requete ne marche po !!!mysql : ç si pourri que ça les JOIN ?
Plus de sujets relatifs à : [Optimisation Mysql] Qui peut m'aider ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR