Salut !
Je me décide finalement à vous soumettre mon problème qui malgré mes recherches aussi bien en français qu'en anglais reste à ce jour insoluble.
J'ai trouvé beaucoup de topic approchant et je pense que c'est un problème archi-classique mais malgré cela je sèche.
Voici ma base simple et suffisamment explicite je pense, qui met en relation des mots et les phrases dans lesquelles ils apparaissent (un corpus):
on peut la télécharger ici.
=== les 3 Tables MYISAM
table MOTS
id_mot INT --> clé avec index
mot VARCHAR
table PHRASE (3M d'enregistrement, environ 650Mo)
id_phrase INT --> clé avec index
phrase TEXT --> index FULLTEXT
table de jointure MOT-PHRASE (3Go)
id_mot INT --> avec index
id_phrase INT --> avec index
=== ma config:
RAM: 1Go Proc 1,72GHz
=== ma requete:
Lorsque il y a plus de 1000 phrases correspondant au mot recherché, la requête dure plus de 15 secondes (c'est le "FETCH" qui est lent).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT phrase FROM MOT-PHRASE JOIN PHRASE ON MOT-PHRASE.id_phrase = PHRASE.id_phrase WHERE id_mot = 1547 # (ce mot apparait dans environ 3000 phrases)
Par contre si je demande juste de m'afficher l'id des phrases, ( en remplaçant "SELECT phrase..." par "SELECT id_phrase..." la requête dure moins de 2 sec !
Est-ce que la table est tout simplement trop grosse pour ma mémoire vive ou alors il existe un moyen de contourner le problème qui m'aurait échappé ? (splitté la table,changer le design de la base, utilisé INNODB,... ?)
Peut-être utiliser un autre format de donnée pour les phrases: remplacer TEXT par VARCHAR ?
Merci de vos suggestions
------------------------------------------------------------------
"En essayant continuellement, on finit par réussir. Donc : plus ça rate, plus on a de chances que ça marche" (devise Shadock)
Partager