Bonjour,
j'ai une bonne grosse requête et une bonne grosse table.
j'essayes d'optimiser évidement tout cela.

Ma requete:
via phpmyadmin je mets 0.0003 sec
pourtant via php je mets plus de 30 sec.

Pourquoi?

voici mon code de test
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
$sql = "SELECT ana_liste.nom_action,ana_marge.suffixe,ana_marge.date_num,STR_TO_DATE(ana_marge.date_date,'%d/%m/%Y'),ana_marge.sens,ana_marge.marge,ana_marge.jrs_posit,ana_marge.ma_jrsp,ana_tende.dwphase_cac,ana_tende.dwprofil_cac,ana_tende.posbdfg_cac,ana_tende.posd200_cac,ana_tende.posd100_cac,ana_tende.posd050_cac,ana_tende.postdli_cac,ana_tende.poskal_cac,ana_tende.dwpente_cac,ana_tende.dwptcac_max,ana_tende.dwptcac_min,ana_tende.dwphase_act,ana_tende.dwprofil_act,ana_tende.posbdfg_act,ana_tende.posd200_act,ana_tende.posd100_act,ana_tende.posd050_act,ana_tende.postdli_act,ana_tende.poskal_act,ana_tende.dwpente_act,ana_tende.dwptact_max,ana_tende.dwptact_min,ana_tende.ifr_act,ana_tende.ifr_act_max,ana_tende.ifr_act_min FROM ana_marge INNER JOIN ana_liste ON ana_marge.suffixe = ana_liste.suffixe INNER JOIN ana_tende ON ana_marge.suffixe = ana_tende.suffixe AND ana_marge.date_num = ana_tende.date_num WHERE ana_marge.sens = 'ACH' AND ana_marge.ref_cfg = '' AND SUBSTR(ana_marge.cas,1,1) <> 'S'";
$db = new PDO('mysql:host=localhost;dbname=anatec', 'admin', 'admin');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // testé avec et sans n'a pas d'influance sur la durée
//envoie de la requete
$req = $db->query($sql);
//$db->query($sql); //même sans la stocker cela prends autant de temps
$db = null;
echo "<br/>durée: ".(microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"]); // entre 30 - 40 sec à chaque fois

Pour la requête comme vous pouvez le voir, j'ai supprimé quasi tout les espaces et l'ai mis sur une ligne pour optimiser tout cela

Config:
mysql + apache + phpmyadmin sur le même serveur
tests:
via un client sur le même réseau local

si vous avez des idées/questions n'hésitez pas

Merci d'avance