Bonjour,
j ai fait quelques statistiques sur l usage d un webmail PHP/MySQL avec une table de 50Mo pour le contenu des mails. Ce webmail doit etre changé car c est conceptuellement une hérésie: tout les champs d un mail sont un champ ds une seule table pour tout les utilisateurs. Du coup, chq acces au webmail requiert la generation de la mailbox de l'utilisateur).
Sans retoucher au code car tout sera jeté à priori, j ai juste voulu faire des requetes sur les mails échangés au courts des 2 ans d utilisations, avec le nb de mail par mois ou par jour.
Comme MySQL est un SGBD très limité (les sous requètes ne devraient elles pas fonctionner avec la version 4.l où est ce PHPMyadmin qui est encore plus limité que MySQL?), j ai eu l occasion de découvrir le bien fondé des tables temporaires. Ici, il n est pas question de requete complexe nécessitant la table temporaire, mais plutot de performances.
Avec des requetes ds une boucle, la différence peut s'averer monstrueuse.
Voici ma "simple" requete SQL dans une boucle (PHP) avec la variable $day:
Code :
- for ($i = 0; $i < $nbdays1 ; $i++)
- { // for the last nbdays
- $day = $nbdays1 - $i - 1;
- "SELECT COUNT(date_sent) FROM $table WHERE ( TO_DAYS(date_sent) = (TO_DAYS(NOW()) - $day) )";
- //...
- }
|
Sur 150 jours (donc 150 requètes), la page est générée completememt en 26s
Avec 3 requetes de + pour la création/isertion/suppression d'une table temporaire, cela descend à 3s, soit un rapport 10 !!
Voici le code de ces 3 requetes:
Code :
- $sql1 = "CREATE TEMPORARY TABLE $tmp (date_sent VARCHAR(20))";
- $sql2 = "INSERT INTO $tmp SELECT date_sent FROM $table WHERE date_sent IS NOT NULL"; //ORDER BY date_sent ASC"; // 0,2 s slower with order by!
- $sql3 = "DROP TABLE $tmp";
- $table = $tmp // pour prendre en compte la table temp ds la requete principale
|
Impressionné par le rapport de perfs, j'ai voulu par ce topic partager cette expérience.
Ci cela peut donner des idées à certains pour optimiser leurs sites...