-
optimisation php mysql
Bonjour,
j'ai un probleme d'optimisatin de requete, voir d'architecture mysql.
J'ai une serie de donnees pour chaque personne dans une entreprise informatique.
Pour chaque entree j'ai une bonne vingtaine de champs (une technologie informatique) avec un niveau associé(expert, bon, moyen, notions=
Par exemple :
Serge : oracle (expert) / unix (expert) / c (bon)/ php (notions) / sybase (notions) / powerbuilder (bon)/ etc ...
antoine: unix(bon)/ c(bon) / visuals basic (bon)/ etc ...
stephane : php (expert)/ mysql (moyen) / linux etc ...
Imaginez une base de données consequante (plusieurs milliers de noms) et une vingtaine de champs chacun (avec a chaque fois un niveau entre parenthese ou dans un autre champs).
j'ai un outil de recherche mais je souhaite classer par pertinence ... si je recherche "oracle" chez un employé, je souhaite avoir en premiere reponse les experts, puis le sbons, puis le moyens, puis les notions. Si je recherche oracle+unix, je souhaite les experts dans les deux, puis expert/bon, puis etc....
Le soucis est le temps de traitement pour obtenir les reponses classees puisque chaque terme recherchés (oracle, unix etc ...) peuvent-etre dans n'importe quel champs (1 a 20 ) .... donc il faut tester tout les champs(c'ets le plus long) , extraire le niveau et comparer (la dessus pas de soucis apriori) ...
quelqu'un a -t-il une idee ?
J'ai pense creer une base avec tous les termes que je peux rechercher et noter le niveau du candidat pour chaque (une sorte d'index)... il y aura beaucoup de termes mais au moins ils seront toujorus au meme endroit et plus accessibles.
Est-ce une solution ? y-a-til plus simple ? une astuce ?
Merci d'avance,
Stephane.
Configuration: Windows XP
Internet Explorer 6.0
-
Bonjour,
Si tu as la possibilité de modifier la structure de la base de données, je pense que revoir la manière dont elle est modélisée serait une bonne chose. Je verrai plutôt une séparation entre les utilisateurs et leurs compétences, matérialisée par 2 tables distinctes. La table des compétences ne comporterait que 3 champs :
- l'identifiant de l'utilisateur, pour la jointure
- le domaine de compétence (oracle, unix, php, ...)
- le niveau (10=expert, 5=moyen, 1=notions, 0=nul, ...)
Tu aurais donc une vingtaine de lignes dans cette table, au lieu d'une vingtaine de colonnes dans ta table des utilisateurs. La clé primaire pourrait être composée des 2 premiers champs ce qui t'assure l'unicité d'un domaine par utilisateur, et le fait d'utiliser une valeur numérique pour stocker le niveau te permet beaucoup plus de souplesse pour tes classements.
En espérant que cela t'apporte quelques idées...
A+
-
Je suis du meme avis, je te conseillerai d'adapter la structure à tes besoins et d'essayer de pas faire un fourre tout dans les champs (sinon à quoi bon une bdd?). Car en terme de performance et de facilité de gestion de ton information (tri, recherche, etc...), ce sera le jour et la nuit.