Accueil > Forum > > > > Requete SQL >120secondes
Requete SQL >120secondes
lundi 8 février 2010 à 15:24:11 |
Requete SQL >120secondes

morbak01
|
Bonjour,
Bonjour,
J'ai une table MySQL qui fait 510 000 lignes avec 19 champs qui représente des log de chaques jours sur une année ttes les minutes. Donc pr chaque jour j'ai env 1440 entrées
pour chaque jour de chacun des mois je cherche le MIN & MAX pour 4 Champs puis je fait un graph pour chaque mois de l'année. (graph avec la lib jpgraph).
Le pb c'est que la requete fait plus de 120 secondes, comment optimser le truc:
La table est organisée de cette façon:
Date hchc hchp
01/01/10 12345678 123456789
le code: ($annee est du style 2008)
Code PHP : function sql_affiche_graph_annuel ($base_name,$annee)
{
$url_sql="localhost";
$table_sql="base";
$log="root";
$pass="";
$MONTHS = array("Janvier", "Février", "Mars", "Avril", "Mai",
"Juin", "Juillet", "Août", "Septembre", "Octobre",
"Novembre", "Décembre");
$dimx=300;
$dimy=200;
$ind_hc=array(12,32); /
$ind_hp=array(12,32);
$A=substr($annee,2,2);
$db = mysql_connect($url_sql, $log, $pass); // on se connecte à MySQL
mysql_select_db($table_sql,$db); // on sélectionne la base
for ($num_mois=1;$num_mois<13;$num_mois++)
{
if (strlen($num_mois)==1)// Rajoute un Zero au chiffre des unités pr garder la meme lg de la string
{$num_mois_new="0".$num_mois;}
else
{$num_mois_new=$num_mois;}
for ($num_du_jour=1;$num_du_jour<32;$num_du_jour++)
{
if (strlen($num_du_jour)==1)// Rajoute un Zero au chiffre des unités pr garder la meme lg de la string
{$num_jour_new="0".$num_du_jour;}
else
{$num_jour_new=$num_du_jour;}
$jour_new=($num_jour_new.'/'.$num_mois_new.'/'.$A);
echo '<b>jour new : '.$jour_new.'</b><BR>';
// Extraction des valeurs MIN et MAX de HCHC et de HCHP
$sql = "SELECT MIN(hchc) as min_hc2, MAX(hchc) as max_hc2,MIN(hchp) as min_hp2, MAX(hchp) as max_hp2 FROM $base_name WHERE date='$jour_new'";
$result=mysql_query($sql) or die(mysql_error());
$min_hc=mysql_result($result,0,'min_hc2');
$max_hc=mysql_result($result,0,'max_hc2');
$min_hp=mysql_result($result,0,'min_hp2');
$max_hp=mysql_result($result,0,'max_hp2');
$ind_hc[$num_mois_new][$num_du_jour]=$max_hc-$min_hc;
$ind_hp[$num_mois_new][$num_du_jour]=$max_hp-$min_hp;
}
}
mysql_close($db);
Il y a t il une façon nettement plus performante pour extraire ces infos?
Merci,
|
|
lundi 8 février 2010 à 15:48:20 |
Re : Requete SQL >120secondes

syndrael
|
Alors il y a plusieurs façons:
1. changer le type de table. En effet, à titre d'exemple HEAP est plus rapide de MyISAM pour certaines requetes
2. calculer et mettre dans une table les Min et Max qui ne changeront plus jamais. ainsi, plus de recalcul
3. comme tes données sont ordonnées chronologiquement, peut-être qu'un traitement sur des fichiers formatés pourrait être un alternative (via grep ou awk).
Dans l'absolu, ne mettre en table que ce qui peut influencer la donnée à traiter et 'archiver' le reste.
S.
|
|
lundi 8 février 2010 à 16:51:00 |
Re : Requete SQL >120secondes

nhervagault
|
Salut,
Solution
Faire 1 requete qui ramene 360 lignes à la place de 360 qui ramene 1 ligne
Bon dev
|
|
lundi 8 février 2010 à 18:13:20 |
Re : Requete SQL >120secondes

morbak01
|
hi,
je n'arrive pas trop a saisir, faire 1 requete qui ramene à 360 ligne reviens à extraire les jours... mais je ne vois pas trop quelle requete faire, peux-tu préciser stp.
thx,
|
|
lundi 8 février 2010 à 18:56:43 |
Re : Requete SQL >120secondes

nhervagault
|
Ca
Code : SELECT MIN(hchc) as min_hc2, MAX(hchc) as max_hc2,MIN(hchp) as min_hp2, MAX(hchp) as max_hp2 ,`date` as date_1 FROM $base_name GROUP BY `date`
Et apres tu auras un code du genre
Code PHP :
$query = "SELECT ................";
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array($result)){
$day = day($row['date_1']);
$month = month($row['date_1'];
$ind_hc[month($month['date_1'])][$day]=$row['max_hc2']-$row['min_hc2'];
$ind_hp[month($month][$day]=$row['max_hp2']-$row['min_hp2'];
}
mysql_close($db);
C'est pas testé mais ca donne une idée de ce qui peut être fait
|
|
lundi 8 février 2010 à 20:05:00 |
Re : Requete SQL >120secondes

morbak01
|
Wahou...
Sans vouloir abuser, j'ai pas tout compris à ton exemple.
Je viens de mettre les pieds ds le sql depuis qq jours seulement.
Peux tu me commenter un peu tout cela afin que j'essaye de comprendre la philosophie de l'approche stp.
(en autre day(...), month(...) ..)
sry
mais thx qd meme.
;)
|
|
lundi 8 février 2010 à 22:23:20 |
Re : Requete SQL >120secondes

nhervagault
|
Ok
Je ne connaissais pas ton niveau en PHP,
si la requete est ok tu auras normalement comme resultat
min_hc2, max_hc2, min_hp2, max_hp2 , date_1
1 2 6 10 01/01/2010
2 5 7 15 02/01/2010
.....
Code PHP :
while($row = mysql_fetch_array($result)){
//on recupere le jour et le mois pour faire les indices du tableau
$day = date('d',$row['date_1']);
$month = date('m',$row['date_1'];
$ind_hc[$month][$day]]=$row['max_hc2']-$row['min_hc2'];
$ind_hp[$month][$day]=$row['max_hp2']-$row['min_hp2'];
}
Je ne connaissais pas les fonctions PHP par coeur.
et j'ai pas peu dérapé dans l'écriture de la boucle
je pense que ca doit être mieux.
Essaies de faire fonctionner la requete dans un premier temps et apres le code
Bon dev
|
|
mardi 9 février 2010 à 11:27:10 |
Re : Requete SQL >120secondes

syndrael
|
Ah oui, si c'est ça ton niveau de PHP, laisse tomber mes solutions.. Un chouillat plus complexe à mettre en oeuvre.. LOL !!
|
|
mardi 9 février 2010 à 11:31:50 |
Re : Requete SQL >120secondes

morbak01
|
Ben woui mais désoél, j'apprends
quoi qu'il en soit le code avance merci qd meme.
|
|
mardi 9 février 2010 à 12:44:49 |
Re : Requete SQL >120secondes

syndrael
|
Après tu nous fera part de l'amélioration des performances. c'est toujours sympa de voir l'amélioration pour un m^me résultat.
S.
|
|
Cette discussion est classée dans : mysql, sql, max, min, result
Répondre à ce message
Sujets en rapport avec ce message
Retour à la ligne [ par philagui ]
Bonjour,je fais afficher tous les resultats d'un champ d'une DB MySQL par l'intermédiaire du script suivant:$sql="SELECT Titre FROM Tableaux WHERE 1";
pb popup & mysql [ par pixou30 ]
Salut à tous! voici mon problème : sur une page en php j'affiche le une partie du contenu de ma bdd (c'est une liste de films, avec référence, Année d
Problème requête MySQL [ par albator77 ]
Bonjour,Je débute en PHP, et j'ai un problème :Si je fais la requête suivante, il n'y a pas de problème :$result_sql = mysql_query("select Nom,Type,Ta
probleme d'envoi email [ par pietbrouwers ]
quelqu'un peut-il me dire ce qui ne fonctionne pas dans le script suivant : je n'arrive pas a recevoir par mail le contenu de la facture. voir la fin
Lecture dans une db MySql [ par rems02 ]
Voilà j'ai un petit probleme:apres connexion à ma base de données MySqlje veux recuperer des données qui se trouventdans un tableau "compteur" colonne
adaptation code..rrrrr [ par fersayn ]
Bonsoir,J'ai deux formulaire avec des name produits et mots, et je souhaite faire une recherche dans deux champs d'une db sql qui portent les memes no
prob pagination [ par soussan ]
sltj'ai un rpob de pagination ; pour la premiere page tt marche bien mais pour la deuxième je suis bloqué ca donne pas la suite des enregistrement voi
Afficher un resultat aléatoire d'un requete sql [ par loupile ]
Bonjour, voilà je vous explique, j'aimerai qu'a chaque chargement de la page, les informations affichées soient différentes pour l'utilisateur ... j'a
requete SQL genere Page Web inaccessible [ par morbak01 ]
Bonjour, J'ai une table MySQL qui fait 510 000 lignes avec 19 champs qui représente des log de chaques jours sur une année ttes les minutes. pour chaq
Checked sur input avec nom variable [ par eltyty ]
Bonjour, je fais une lecture de deux table une client avec id, nom et champs dans laquelle les champs correspondent à des id (de la table logiciel) s
Livres en rapport
|
Derniers Blogs
ROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGEROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGE par Matthieu MEZIL
Si vous utilisez Roslyn et que vous vous voulez vous simplifier le code du code rewriter, je vous conseille d'installer mon NuGet package RoslynHelper ....(read more) ...
Cliquez pour lire la suite de l'article par Matthieu MEZIL POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko
Forum
SELECTSELECT par hab2oo
Cliquez pour lire la suite par hab2oo
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|