Bonjour,
ce serait pour un moteur de recherche multi-critères, (utilisé sur un site relativement fréquenté, pas une fonctionnalité inutile sur un blog inconnu)
problème :
on ne veut pas faire de jointure entre 15 tables...
article - motsclés -geographies - auteurs - categories - ... blababla
structure classique d'une bdd en 3eme forme normale
de même, sur la page de résultats, ça afficherait différentes informations, (le lien sur l'article par exemple, sa rubrique, ses mots clés, sa rubrique parent, le tout bien évidement cliquable etc.)
Pareil : chaque élément a besoin d'infos venant de beaucoup de tables à la base
- ça rend la recherche complexe à écrire déjà
- c'est pas optimal vu le nombre d'infos à charger partout
(ps : oui les champs sont indexés)
----
On a testé :
faire une "table de recherche", où on "exporte" les articles concernés
avec toutes les informations. (l'id du mot clé, son label etc. etc.)
qui est reconstruire régulièrement...
1 ligne = 1 enregistrement archi complet
même des champs multivalués
listeMotsCles = "10,92,67"
et au lieu de faire
select join articles / join rubriques / join mots clés / ...
on fait simplement
select from index_recherche where listeMotsCles like %,92,%
et on obtient tout ce qu'il faut pour l'affichage directement, aucune jointure, aucune table principale n'est jamais impactée... (pas de copying to tmp tables...)
----
"bilan"
ça fonctionne bien, c'est rapide et stable.
je voulais avoir l'avis de quelques spécialistes sur cette façon de faire. C'est bcp de redondance de données pour les performances, mais ça ne nous dérange pas.
(j'étais un peu inquiet d'une requête de ce genre
select from index_recherche where listeMotsCles like %,92,%
mais c'est extrêmement rapide)
merci
Partager