utilité d'indexation des tableaux

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : utilité d'indexation des tableaux

par Invité » 11 juil. 2008, 09:38

bonjour et merci pour vos réponses,
je parle sur l'indexation des tableaux sql d'une base de donnée mysql.
mon application fait selon une option selectionnée dux type de recherche. la première type de recherche concerne un seule tableau hscode1 alors que la deuxième type de recherche concerne 2 types de recherche(n'est pas encore terminée si vous pouvez m'aider sera le bien venue) fait une une recherche dans deux tableaux et verifie l'existence du recherché dans le champ design du tableau hs6 et il prend les codes qui verifie cette mot puis fait reference au tableau hscode1 en affichant les enregistrement qui ont le 6 premiers chiffres du champ hscode1 conforme au chiffres du code hs6 ,voila la structure de deux tableau hs6 et hscode1:
hscode1(id,code,desig,arab,other,duty,hs6);
hs6(id,ndp,designation);
et voila l'algorithme de recherche

Code : Tout sélectionner

if($colname_typ==2){ $cond1="desig like " ; $cond2=" " ; $condi=""; foreach($lstm as $mot){ if(is_numeric($mot)) { $codrech.=" OR Code=$mot"; } $mot=netmot($mot); $io=''; if ($mot>0) $io="code like '$io%'"; if($condi!="") $condi.=" AND ($cond2'". $mot ."youssef') or $cond1 '% ". $mot ."%')"; else $condi.="($cond2 $cond1 '% ". $mot ."%')"; if($condi!=""&&$io!="") $condi=$io." OR ".$condi; else if($io!="") $condi=$io; } $query_result = sprintf("SELECT DISTINCT hscode1.CODE,hscode1.Desig, hscode1.arab, hscode1.OTHER FROM hs6 RIGHT JOIN hscode1 ON ( hscode1.hs6 = hs6.ndp ) WHERE %s", $condi); } if($colname_typ==1) { $cond1="desig like " ; $cond2="match(arab,other) against( " ; $condi=""; foreach($lstm as $mot) { if(is_numeric($mot)){$codrech.=" OR Code=$mot"; } $mot=netmot($mot); $io=''; if ($mot>0) $io="code like '$io%'"; if($condi!="") $condi.=" AND ($cond2'". $mot ."') or $cond1 '% ". $mot ."%')"; else $condi.="($cond2'". $mot ."') or $cond1 '% ". $mot ."%')"; if($condi!=""&&$io!="") $condi=$io." OR ".$condi; else if($io!="") $condi=$io; } $query_result = sprintf("SELECT CODE, ID, Desig,arab, OTHER FROM hscode1 WHERE %s", $condi); //$query_result = "SELECT CODE, ID, Desig, arab, OTHER FROM hscode1 WHERE ( MATCH (arab, other AGAINST ('milk')OR desig LIKE '% milk%')LIMIT 0 , 30"; } $result = mysql_query($query_result, $yyy) or die(mysql_error());
Toute information sera le bien venue

par vince_weed » 10 juil. 2008, 14:53

Bien que les indexes soit un moyen pour réduir le temps d'acces, tu devais aussi essayer d'optimiser tes requetes et surtout la structure de tes tables si tu le peut. S tu nous donnait la structure des table et la parti du code qui accede a ta BDD nous pourrions t'aider plus efficacement.

par orgerix » 10 juil. 2008, 12:12

Les tableaux dont tu parles sont des variables php ou bien alors des tables SQL ?

Dans le premier cas, l'indexation consiste à utiliser des clef associatives. Par exemple, ce tableau
array(
  'pomme',
  'poire',
  'banane'
);
Pour savoir si banane est dans le tableau, tu es obligé de le parcourir entièrement (soit avec foreach, soit avec une fonction de manipulation de tableau). Si le tableau est relativmeent gros, ca peut prendre du temps.

En revenche, si tu utilise des clefs associatives, comme ca :
array(
  'pomme'=>TRUE,
  'poire'=>TRUE,
  'banane'=>TRUE
);
Il suffit juste de tester l'existance de la variable $tableau['banane'] pour voir si elle existe. Bien sur, la création de l'index prend du temps et de la mémoire(?). C'est une histoire de compromis

Dans le deuxième cas, la création d'index établit un sommaire des enregistrement, permettant d'accélérer les recherches. C'est comme un livre. Sans sommaire, tu dois lire les pages une à une tandis qu'avec un sommaire, tu cible rapidmeent ce dont tu as besoin. Cependant, il faut établir son index en regardant bien les requètes SQL. Il ne dois être ni trop vaste, dans ce cas il ne sert à rien, ni trop précis car sinon il ne sera pas utliser par le moteur SQL.

utilité d'indexation des tableaux

par fraisa1985 » 10 juil. 2008, 10:31

Salut a tous,
Je suis entrain de développer un projet php/mysql ou j'ai une partie de recherche avec php dans des tableaux qui contiennent plus que 75000 enregistrements donc j'ai eu une probleme de temps de reponse. Pour cela im conseille de voir le principe d'indexation des tableaux.
C'est quoi l'indexation des tableaux?
est-il utile vraiment pour la performance du recherche dans des tableaux pour le sgbd mysql?
comment faire l'indexation des tableaux ?
desolé pour le 3questions etr svp ne soyez pas sevére avec mois car je suis encore novice dans php/mysql.
Toute information sera le bien venue et merci d'avance