Obtenez juste votre table pour tenir dans la mémoire, qui devrait être trivial pour 70k rangées.
Ensuite, vous pouvez faire un scan très facilement. Peut-être n'utilisez-vous même pas une base de données sql pour cela (car cela ne change pas très souvent), il suffit de vider les villes dans un fichier texte et de l'analyser. Ce serait certainement mieux si vous avez de nombreux serveurs Web mais seulement un serveur DB, chacun pouvant conserver sa propre copie du fichier.
Combien de requêtes par seconde voyez-vous le pic? Je ne peux pas imaginer qu'il y ait beaucoup de gens qui tapent des noms de villes, même si c'est un site très occupé.
Aussi, vous pouvez mettre en cache les réponses individuelles (par exemple dans memcached) si vous obtenez un bon taux de succès (par exemple parce que les gens ont tendance à taper les mêmes choses)
En fait, vous pourriez aussi précalculer probablement les réponses pour toutes les combinaisons de trois lettres, ce n'est que 26 * 26 * 26 (= 17k) entrées. Comme une entrée de quatre lettres ou plus doit logiquement être un sous-ensemble de l'une de celles-ci, vous pouvez alors scanner l'entrée appropriée parmi les entrées 17k.
thanx, j'aime l'idée d'utiliser JSON, est plus efficace que d'autres? – assaqqaf
Je supposais que vous utilisez déjà des messages au format JSON, car c'est le format le plus commun utilisé pour le transfert de données AJAX. Le format JSON est léger, peut être analysé très rapidement en Javascript et a un bon support dans jQuery. Cependant, tout autre format peut être mis en cache sur le serveur de la même manière. Donc, si vous préférez un autre format, allez-y. – John