Bonjour à tous
je fais une recherche selon un mot clé ($motCle) contenu dans un type de champs précisé par l'utilisateur a l'aide de radio button ($type)
la requete est sur plusieurs tables et dynamiquement construite

j'affiche dans un tableau les valeurs de retour, par groupe de 20 aidé par la pagination

Mon problème est le suivant, quand je faisais mes teste il n'y avait pas vraiment de probleme car j'avais environ une centaine d'entré dans ma table, sauf que j'ai du migré un ancien systeme et tous les dossier qu'il avait...ca porte présentement mon nombre d'enregistrement a 15000...la recherche est fastidieuse, le temps pour afficher les résultats est significatif maintenant...


La requete, testé en phpMyAdmin prend pratiquement 4 sec de temps d'execution moyen, je ne connais pas vraiment les temps requis ou habituel pour un nombre pareil d'enregistrement, mais bon est-ce normal ou encore c'est effectivement le temps que ca prend??

je mets ici ma requete pour vous en donner une idée
Les variables sont les suivante:
$_SESSION['typeRecherche'] = tbldossier.dossierNum
$_SESSION['motcle'] = ''; //Si c'es rien, ca cherche dans tous
$page = la page où on est rendu lors de l'affichage
$nb = le nombre d'affichage par page ..ici c'est 20

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
// Selection des enregistrements pour la page considérée
$strScript = "SELECT SQL_CALC_FOUND_ROWS tbldossier.versionDossier, tblclientassure.clientAssurePrenom, tblclientassure.clientAssureNom,tbldossiercieassurance.numDossierAssurance, tbltiercepartie.prenomTier, tbltiercepartie.nomTier, tbldossier.dossierID, tblcieassurance.cieAssuranceNom, tbldossier.dossierNum, ";
$strScript .= "(".$_SESSION['typeRecherche']." LIKE '".$_SESSION['motCle']."')*8+(".$_SESSION['typeRecherche']." LIKE '%".$_SESSION['motCle']."%') AS pertinence ";
$strScript .= "FROM tbldossierajusteur ";
$strScript .= "LEFT OUTER JOIN tbldossier ON tbldossierajusteur.dossierID = tbldossier.dossierID ";
$strScript .= "LEFT OUTER JOIN tblclientassure ON tbldossier.clientAssurerID = tblclientassure.clientAssureID ";
$strScript .= "LEFT OUTER JOIN tbldossiercieassurance ON tbldossier.dossierID = tbldossiercieassurance.dossierID ";
$strScript .= "LEFT OUTER JOIN tblcieassurance ON tbldossiercieassurance.cieAssuranceID = tblcieassurance.cieAssuranceID ";
$strScript .= "LEFT OUTER JOIN tbltiercepartie ON tbldossier.dossierID = tbltiercepartie.dossierID ";
$strScript .= "WHERE tbldossier.dossierActif = 1 ";
 
if($_SESSION['typeRecherche'] != "tblcieassurance.cieAssuranceNom"){ 
	$strScript .= "AND tbldossiercieassurance.responsabilite = '100' ";
}
 
//$strScript .= "ORDER BY pertinence DESC, ".$_SESSION['typeRecherche']." ";
$strScript .= "GROUP BY pertinence DESC, ".$_SESSION['typeRecherche']." HAVING pertinence > 0 ";
//Modification de la requete d'affichage pour avoir que les enregistrements par tranche de $nb (20 ici)
$strScript .= "LIMIT ".($page * $nb).",".$nb;
 
 
echo $strScript;
$requete = $objCon->dbQuery($strScript);
 
// Nombre total d'enregistrements
$script = "SELECT FOUND_ROWS()";
$request = $objCon->dbQuery($script);
$total = mysql_fetch_row($request);
...
//affichage
Donc, comment est ce qu'on fait pour rendre une recherh dans plusieur table d'une manière rapide et efficace??
j'attends de vos conseils encore une fois

P.S J'utilise mysql 4.1.20 et php 4.4.2
En guise d'information voici le nombre d'enregistrement de chaque table actuellement:
tbldossierajusteur -> 14 855
tbldossier -> 14 953
tblclientassure -> 11 873
tbldossiercieassurance -> 14 861
tblcieassurance -> 204
tbltiercepartie -> 13