Version complète: sur le forum Webmaster Hub : Optimisation requetes
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net
Reefguardian
Bonjour,

J'ai un souci de perfs sur certaines requêtes. Actuellement je fais comme ça :

1. Table categories
------------------------------------------------
| id | nom_cat | description|
------------------------------------------------
| 18 | maison/jardin/plantes | blablabla |
------------------------------------------------
| 19 | maison/jardin | blablabla |


2. Table liens
-------------------------------------------------------------------------------
| id | url | titre | nom_cat |
-------------------------------------------------------------------------------
| 5 | h*tp://www.domaine.net | blobloblo | maison/jardin/plantes |


Pour cet exemple : pour regrouper tous les enregistrements de la table liens qui font partie de la categorie "maison/jardin" et donc de toutes ses sous catégories (donc "maison/jardin/plantes" inclu), je fais une requête du style :

select * from liens where nom_cat like '%jardin%'


Hors vous en conviendrez, c'est pas ce qui s'appelle de l'optimisation. Les requêtes sont extrêment lourdes et j'aurais aimé un moyen de les alléger.
J'ai pensé mettre un champs "index_id" à la table liens et à la table categorie afin de faire un regroupement sur tous les liens qui ont le même index_id, mais le probleme c'est que dans les resultats dont j'ai besoin il peut y avoir des sites qui sortent pour plusieurs types de catégories, donc je suis un peut coincé. Quelqu'un aurait-il une idée pour rendre les requêtes moins lourdes? blink.gif

Merci,
Stephane
Thanat
Ca me paraît difficile d'optimiser la requête ...
Par contre je pense que c'est un soucis de base de données et d'organisation des tables.

Tu parles de catégories et de sous-catégories ... pourquoi ne pas réorganiser les tables pour prendre en compte cela ?

Création d'un table Catégories qui ne contient que les catégories.
1. Table categories
------------------------------------------------
| id | nom_cat | description|
------------------------------------------------
| 19 | maison/jardin | blablabla |

Création d'une table sous-catégories avec l'id de la catégorie.
2. Table sous-categories
------------------------------------------------
| id | nom_cat | description| id_cat |
------------------------------------------------
| 18 | maison/jardin/plantes | blablabla | 19 |
------------------------------------------------

Est-ce jouable dans ton cas ?

La recherche est-elle libre ?
loban
CITATION(Reefguardian @ jeudi 09 mars 2006, 13h24)
Hors vous en conviendrez, c'est pas ce qui s'appelle de l'optimisation. Les requêtes sont extrêment lourdes et j'aurais aimé un moyen de les alléger.
J'ai pensé mettre un champs "index_id" à la table liens et à la table categorie afin de faire un regroupement sur tous les liens qui ont le même index_id,
*


Oui, il serait judicieux d'ajouter index_id dans la table liens, et de créer un index sur cette colonne index_id.

CITATION(Reefguardian @ jeudi 09 mars 2006, 13h24)
mais le probleme c'est que dans les resultats dont j'ai besoin il peut y avoir des sites qui sortent pour plusieurs types de catégories, donc je suis un peut coincé. Quelqu'un aurait-il une idée pour rendre les requêtes moins lourdes?
*


Non, tu peux faire exactement la même chose en utilisant cette requête :
SQL
select liens.* from liens, categorie
where categorie.nom_cat like '%jardin%' and categorie.id = liens.index_id


Le résultat sera meilleur car le filtrage est fait sur la (supposée) plus petite des tables.
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.