select (fetch) lent sur grosse table 600Mo (pb RAM ?)
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:
Code:
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) |
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).
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 :D
------------------------------------------------------------------
"En essayant continuellement, on finit par réussir. Donc : plus ça rate, plus on a de chances que ça marche" (devise Shadock)