Contexte : extraction de données provenant de plusieurs tables vers un fichier plat.
Je dois donc extraire des données de plusieurs tables vers differents fichiers plats apres avoir retraité les informations
Un exemple concret
mysql> desc arbo_domaines;
+---------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+------------------+------+-----+---------+----------------+
| id | int(11) | | PRI | NULL | auto_increment |
| id_parent | int(11) | | MUL | 0 | |
| niveau | set('0','1','2') | | | | |
| position | int(4) | | | 0 | |
| libelle | varchar(255) | | | | |
| particulier | enum('O','N') | | | N | |
| professionnel | enum('O','N') | | | N | |
+---------------+------------------+------+-----+---------+----------------+
7 rows in set (0.03 sec)
|
Environ 320 enregistrement, c'est un arbre.
mysql> desc reclamation;
+-----------------------+-------------------
| Field | Type
+-----------------------+--------------------
| id_reclamation | varchar(20) | id_annuaire | varchar(6) | id_domaine | varchar(3)
|
Environ 100000 champs
Et je dois donc recuperer le domaine de cette facon
Citation :
Position (sur 2 caractères) 0000 quand id_parent=0 et niveau =0
Parent (sur 2 caractères) Position (sur 2 caractères) 00 quand niveau = 1
Parent1 (sur 2 caractères) Position1 (sur 2 caractères) Position (sur 2 caractères) quand niveau = 2 (parent=id1)
|
Donc je procedais de cette facon :
je cherchais le domaine dans la table et si le niveau etait 2 je refaisais une requete pour aller chercher son pere.
Et ca à chaque enregistrement de reclamations.
je me suis dis qu'en terme de perf c vraiment pas bon vu que j'avoisine les 150.00 requetes.
D'ou l'idée de mettre des le depart la table arbo_domaines dans un tableau et donc de lire directement les informations dedans.
Juste une requete à faire au chargement de l'application et ca va.
Mais voila jusqu a quel niveau c'est plus performant ?
La je vais le faire pour deux tables de 22 et 350 lignes, donc aucun soucis.
Mais j'ai des tables à 10 000 lignes + est ce aussi rentable de les charger dans un tableau une premiere fois au lieu d'aller taper dedans à chaque fois ?.
Ps : je peux pas faire de requete sur plusieurs tables, vu que c souvent de cardinalité (0,1) ou (0,n) et donc oblige de faire des left join un peu partout, ce qui risque de bien plomber les performances MySQL
j'aimerais avoir vos avis en esperant avoir ete assez clair.
Message édité par Sebastien le 25-05-2004 à 13:09:09