J'ai une table "commentaire" de visiteurs ou je fais des recherches sur des mots clefs, cette requete me permet d'extraire le numero correspondant au commentaire.
La structure de cette table est :
numero,commentaires_1,supprimer
numero : int
commentaires_1 : text
supprimer : enum('0', '1')
A partir des numeros que j'obtiens, je fais une recherche sur ma table utilisateur pour savoir le ou lesquels ont fait des commentaires qui correspondents a la premiere requete.
nom : text
prenom : text
commentaire_1 à 9 : int
supprimer : enum('0', '1')
Je fais une recherche sur 3 mots lors de la premiere requete ensuite je teste mes visiteurs soit 6000.
mon code ( 1ere forme ) : temps 40 sec
la requete qui pose probleme est la seconde : $requete_rep
$siz1=sizeof($_SESSION["recherche_libre1"]); # nombre de mot dans la recherche
for ( $j = 0 ; $j < $siz1 ; $j++ )
{
$a=$_SESSION["recherche_libre1"][$j];
if ( $a <> "" and strlen($a) > 2 )
{
$requete = "SELECT numero FROM `procedures_commentaires_1` where commentaires_1 like '%".$a."%' and supprimer='0'";
$resultrequete = mysqli_query($GLOBALS["___mysqli_ston"], $requete ) or die( cadre_erreur( $script_url, __LINE__, $requete ) );
if ( mysqli_num_rows( $resultrequete) > 0 )
{
while ( $ligne = mysqli_fetch_array( $resultrequete ) )
{
extract( $ligne );
$rep=$ligne["numero"];
$requete_rep = "SELECT numero FROM `procedures` where ( commentaire_1='".$rep."' or commentaire_2='".$rep."' or commentaire_3='".$rep."' or commentaire_4='".$rep."' or commentaire_5='".$rep."' or commentaire_6='".$rep."' or commentaire_7='".$rep."' or commentaire_8='".$rep."' or commentaire_9='".$rep."' ) and supprimer='0' ORDER BY numero";
$resultrequete_rep = mysqli_query($GLOBALS["___mysqli_ston"], $requete_rep ) or die( cadre_erreur( $script_url, __LINE__, $requete_rep ) );
if ( mysqli_num_rows( $resultrequete_rep ) > 0 )
{
while ( $ligne_rep = mysqli_fetch_array( $resultrequete_rep ) )
{
extract( $ligne_rep );
$resultat_tableau["commentaire"][]=$ligne_rep["numero"];
}
}
}
}
}
}
Mon code ( 2eme forme ) : temps 28 sec
$siz1=sizeof($_SESSION["recherche_libre1"]); # nombre de mot dans la recherche
for ( $j = 0 ; $j < $siz1 ; $j++ )
{
$a=$_SESSION["recherche_libre1"][$j];
if ( $a <> "" and strlen($a) > 2 )
{
$requete = "SELECT numero FROM `procedures_commentaires_1` where commentaires_1 like '%".$a."%' and supprimer='0'";
$resultrequete = mysqli_query($GLOBALS["___mysqli_ston"], $requete ) or die( cadre_erreur( $script_url, __LINE__, $requete ) );
if ( mysqli_num_rows( $resultrequete) > 0 )
{
while ( $ligne = mysqli_fetch_array( $resultrequete ) )
{
extract( $ligne );
$rep=$ligne["numero"];
$requete_rep = "SELECT numero FROM `procedures` where commentaire_1='".$rep."' and supprimer='0'";
$resultrequete_rep = mysqli_query($GLOBALS["___mysqli_ston"], $requete_rep ) or die( cadre_erreur( $script_url, __LINE__, $requete_rep ) );
if ( mysqli_num_rows( $resultrequete_rep ) > 0 )
{
while ( $ligne_rep = mysqli_fetch_array( $resultrequete_rep ) )
{
extract( $ligne_rep );
$resultat_tableau["commentaire"][]=$ligne_rep["numero"];
}
}
$requete_rep = "SELECT numero FROM `procedures` where commentaire_2='".$rep."' and supprimer='0'";
$resultrequete_rep = mysqli_query($GLOBALS["___mysqli_ston"], $requete_rep ) or die( cadre_erreur( $script_url, __LINE__, $requete_rep ) );
if ( mysqli_num_rows( $resultrequete_rep ) > 0 )
{
while ( $ligne_rep = mysqli_fetch_array( $resultrequete_rep ) )
{
extract( $ligne_rep );
$resultat_tableau["commentaire"][]=$ligne_rep["numero"];
}
}
$requete_rep = "SELECT numero FROM `procedures` where commentaire_3='".$rep."' and supprimer='0'";
$resultrequete_rep = mysqli_query($GLOBALS["___mysqli_ston"], $requete_rep ) or die( cadre_erreur( $script_url, __LINE__, $requete_rep ) );
if ( mysqli_num_rows( $resultrequete_rep ) > 0 )
{
while ( $ligne_rep = mysqli_fetch_array( $resultrequete_rep ) )
{
extract( $ligne_rep );
$resultat_tableau["commentaire"][]=$ligne_rep["numero"];
}
}
$requete_rep = "SELECT numero FROM `procedures` where commentaire_4='".$rep."' and supprimer='0'";
$resultrequete_rep = mysqli_query($GLOBALS["___mysqli_ston"], $requete_rep ) or die( cadre_erreur( $script_url, __LINE__, $requete_rep ) );
if ( mysqli_num_rows( $resultrequete_rep ) > 0 )
{
while ( $ligne_rep = mysqli_fetch_array( $resultrequete_rep ) )
{
extract( $ligne_rep );
$resultat_tableau["commentaire"][]=$ligne_rep["numero"];
}
}
$requete_rep = "SELECT numero FROM `procedures` where commentaire_5='".$rep."' and supprimer='0'";
$resultrequete_rep = mysqli_query($GLOBALS["___mysqli_ston"], $requete_rep ) or die( cadre_erreur( $script_url, __LINE__, $requete_rep ) );
if ( mysqli_num_rows( $resultrequete_rep ) > 0 )
{
while ( $ligne_rep = mysqli_fetch_array( $resultrequete_rep ) )
{
extract( $ligne_rep );
$resultat_tableau["commentaire"][]=$ligne_rep["numero"];
}
}
$requete_rep = "SELECT numero FROM `procedures` where commentaire_6='".$rep."' and supprimer='0'";
$resultrequete_rep = mysqli_query($GLOBALS["___mysqli_ston"], $requete_rep ) or die( cadre_erreur( $script_url, __LINE__, $requete_rep ) );
if ( mysqli_num_rows( $resultrequete_rep ) > 0 )
{
while ( $ligne_rep = mysqli_fetch_array( $resultrequete_rep ) )
{
extract( $ligne_rep );
$resultat_tableau["commentaire"][]=$ligne_rep["numero"];
}
}
$requete_rep = "SELECT numero FROM `procedures` where commentaire_7='".$rep."' and supprimer='0'";
$resultrequete_rep = mysqli_query($GLOBALS["___mysqli_ston"], $requete_rep ) or die( cadre_erreur( $script_url, __LINE__, $requete_rep ) );
if ( mysqli_num_rows( $resultrequete_rep ) > 0 )
{
while ( $ligne_rep = mysqli_fetch_array( $resultrequete_rep ) )
{
extract( $ligne_rep );
$resultat_tableau["commentaire"][]=$ligne_rep["numero"];
}
}
$requete_rep = "SELECT numero FROM `procedures` where commentaire_8='".$rep."' and supprimer='0'";
$resultrequete_rep = mysqli_query($GLOBALS["___mysqli_ston"], $requete_rep ) or die( cadre_erreur( $script_url, __LINE__, $requete_rep ) );
if ( mysqli_num_rows( $resultrequete_rep ) > 0 )
{
while ( $ligne_rep = mysqli_fetch_array( $resultrequete_rep ) )
{
extract( $ligne_rep );
$resultat_tableau["commentaire"][]=$ligne_rep["numero"];
}
}
$requete_rep = "SELECT numero FROM `procedures` where commentaire_9='".$rep."' and supprimer='0'";
$resultrequete_rep = mysqli_query($GLOBALS["___mysqli_ston"], $requete_rep ) or die( cadre_erreur( $script_url, __LINE__, $requete_rep ) );
if ( mysqli_num_rows( $resultrequete_rep ) > 0 )
{
while ( $ligne_rep = mysqli_fetch_array( $resultrequete_rep ) )
{
extract( $ligne_rep );
$resultat_tableau["commentaire"][]=$ligne_rep["numero"];
}
}
}
}
}
}
Tout mes champs sont indexés mais je n'arrive pas a diminuer le temps de recherche :
table procedures commentaires_1
PRIMARY PRIMARY 5864 numero
supprimer INDEX 2 supprimer
commentaires_1 FULLTEXT 1 commentaires_1
table procedures
PRIMARY PRIMARY 6266 numero
supprimer INDEX 2 supprimer
commentaire_1 INDEX 298 commentaire_1
commentaire_2 INDEX 783 commentaire_2
commentaire_3 INDEX 1566 commentaire_3
commentaire_4 INDEX 1 commentaire_4
commentaire_5 INDEX 417 commentaire_5
commentaire_6 INDEX 368 commentaire_6
commentaire_7 INDEX 895 commentaire_7
commentaire_8 INDEX 10 commentaire_8
commentaire_9 INDEX 102 commentaire_9
commentaire_10 INDEX 783 commentaire_10
Voilà, si quelqu'un a une idée pour me permettre d'optimiser mes recherches.
Ton code peut-etre reduit au maximum pour ce serveur ce qui veut dire ca ne sert a rien de travailler dessu pour la faire aller plus vite car hebergeur ne suit pas... tu es heberger où ? Regarde MoteurProg il sautait saturé de requete SQL donc la on a change sur un vraiment plus gros serveur plus perfomant... Si on paye le meme prit que l'ancien... mais la celui la il est payer a 2 ... alors disons avant ca coute 500$ ... celui la a coute 1000$/mois ou 1000$/an je sais plus... entk tous ca pour dire ca vien du serveur hébergement... et si tu es hebergé gratuit...bien la c'est sure ca c'est ce qu'il a de plus mauvais... Tous plein de clients sur le meme serveur... ouch!
__________________________ Votre Serviteur Rock_4_Ever
Je m'excuse des fautes faites.
Je suis présentement: sur msn.
N'oubliez pas non plus la mention Résolu
Venez nous rejoindre sur le chat de MoteurProg, par Java ou mIRC