Recherche dans une grosse BDD MySQL ; lenteur

Eléphanteau du PHP | 29 Messages

22 déc. 2011, 11:08

Bonjour,
Je travaille actuellement sur une base de données comportant plusieurs millions d'enregistrements.
Je développe un moteur de recherche (pour l'instant, je ne cherche sur un seul champ); le problème est que le temps de réponse est exagérément long.
La recherche de terme exact est très rapide, grâce a l'indexation de ce champ.
En revanche, la recherche partielle (avec des LIKE %%) est celle qui prend les 99 % du temps requis. Ce qui est normal, les index ne servant à rien dans le cas de recherches partielles.
Question, comment améliorer ce temps de réponse ? De façon à le rendre acceptable.
Quelle(s) technique(s) utilisent des gros sites tels qu'Amazon ou Ebay , pour effectuer des recherches ultra rapides sur des bases énormes ?
Merci à vous par avance,
Bien cordialement

Mammouth du PHP | 568 Messages

22 déc. 2011, 12:17

Salut,

Une première piste est d'utiliser des index FULLTEXT (seulement autorisé sur des table MyIsam il me semble), ce qui te permettra de faire des requêtes du type

WHERE MATCH (title,body) AGAINST ('database');

Ce qui est plus performant qu'un LIKE et te permet de gérer la pertinence des résultats.

http://dev.mysql.com/doc/refman/5.0/fr/ ... earch.html

Concernant les gros acteurs du web, je sais que certains utilise des moteurs de recherche spécifique, comme par exemple Sphinx.

Un peu de lecture:

http://sphinxsearch.com/
http://xf.iksaif.net/blog/index.php?pos ... troduction

Eléphanteau du PHP | 29 Messages

22 déc. 2011, 12:32

Bonjour et merci de ta réponse,
En même temps que je rédigeais ma question, j'étais en train de mettre en place des index Fulltext. Les résultats ont l'air assez pertinents et bcp plus rapides en effet.
J'ai jeté un oeil sur Sphinx, cela nécessite d'avoir la main sur le serveur; mais en effet cela semble être largement utilisé...

MagicPHP
Invité n'ayant pas de compte PHPfrance

27 janv. 2012, 04:35

Tu peux aussi regarder du côté de http://framework.zend.com/manual/fr/zen ... rview.html