fichier de 50.000 enregistrements, INDEX ?

Eléphant du PHP | 64 Messages

03 janv. 2006, 06:54

Bonne année à tous,

Je veux trouver un no de tel dans un champ telephone, mais je bloque à chaque fois sur un temps de traitement supérieur à 30 sec. etc...

J'ai entendu parler de l'utilisation d'index, j'ai créé un index que j'appelle "phone"

je l'appelle par

$resultph = mysql_query ("SELECT * FROM adtel INDEX phone",$db);

while ($myrowph = mysql_fetch_array($resultph)) {

puis j'utilise un strpos

mais il y a un message disant

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ...\phone_search.php on line 39

Merci à ceux qui m'aident dans mon pateaugeage

Denis

Mammouth du PHP | 1776 Messages

03 janv. 2006, 07:23

Whaouh !
Dejà, mets ton code entre balise. Ensuite, pour ton soucis, pkoi ne pas faire la selection directement dans la requete ???
De plus tu as un erreur de syntaxe ^^
<?
$built_request = "SELECT * FROM adtel WHERE phone='".$numero_de_telephone_recherche."'"; // on construit la requête
$result_request = mysql_query ($built_request,$db); //on envoie la requête
$result_rows_request = mysql_fetch_array($result_request); // on envoie tout en "tableau"
?>
Ca c'est déjà mieux...
Maintenant si on avait plus d'infos sur ton script, savoir si chaque numéro est unique ou non (ba oui, si t'as pas mis un type "unique"...et si tu contrôles pas si le num est deja entré...)
Donc ceci peut être une piste :wink:

Note: hésite pas à apporter une réponse à l'aide que l'on t'apporte et surtout à corriger ton post en mettant le code entre balises (pas comme http://www.phpfrance.com/forums/voir_reponse-7731.php ...)

ViPHP
ViPHP | 1380 Messages

03 janv. 2006, 09:17

Comment as-tu créé ton index? La syntaxe normale pour le créer est:

Code : Tout sélectionner

ALTER TABLE taTable ADD INDEX (nomCol)
Tu peux le créer également dans phpmyadmin. Si ton index est créé correctement, il n'est pas nécessaire de l'appeler dans ton SELECT, MySQL le fait tout seul. De plus, ta syntaxe n'est pas correcte. Si tu veux forcer l'utilisation d'un index dans un SELECT (mais, je le répète, ce n'est nécessaire que si MySQL ne le fait pas) la syntaxe correcte est:

Code : Tout sélectionner

SELECT ...FROM ... USE INDEX (nomIndex) WHERE ....
Enfin, si tu veux t'assurer que MySQL utilise bien ton index, fais simplement un:

Code : Tout sélectionner

EXPLAIN SELECT ...FROM ... WHERE ....
Si tu ne vois rien dans la colonne key c'est qu'il y a un problème.
ripat

Eléphant du PHP | 64 Messages

03 janv. 2006, 17:09

Merci à PRoGRaFLaSH et ripat pour leur aide,

Je vais me plonger dans le code en fin de journée, je démarre ma boite de conseil pour lancer les entreprises au Canada.

le fichier en question:

Code : Tout sélectionner

CREATE TABLE adtel ( adt_id int(6) NOT NULL auto_increment, adt_adr_id int(6) NOT NULL default '0', adt_pos int(2) NOT NULL default '0', adt_lg char(1) NOT NULL default '', adt_mr char(2) NOT NULL default '', adt_first varchar(25) NOT NULL default '', adt_last varchar(25) NOT NULL default '', adt_phone varchar(25) NOT NULL default '', adt_cell varchar(25) NOT NULL default '', adt_1800 varchar(25) NOT NULL default '', adt_fax varchar(20) NOT NULL default '', adt_func varchar(20) NOT NULL default '', adt_func0 varchar(20) NOT NULL default '', adt_email varchar(50) NOT NULL default '', adt_url varchar(100) NOT NULL default '', adt_pob varchar(20) NOT NULL default '', adt_mother_kd varchar(5) NOT NULL default '', adt_mother int(6) NOT NULL default '0', adt_palm char(1) NOT NULL default '', adt_recall char(1) NOT NULL default '', adt_dtact date NOT NULL default '0000-00-00', adt_tact time NOT NULL default '00:00:00', adt_kd_nr varchar(5) NOT NULL default '', adr_ori_tel int(6) NOT NULL default '0', adt_send char(1) NOT NULL default '', adt_cat varchar(5) NOT NULL default '', adt_flag char(1) NOT NULL default '', adt_updated date NOT NULL default '0000-00-00', PRIMARY KEY (adt_id), KEY Phone (adt_phone), KEY Cell (adt_cell), KEY 1800 (adt_1800), KEY fax (adt_fax) ) TYPE=MyISAM;
Merci encore

Denis