Optimisation sql - Petite question

WRInaute occasionnel
Salut, j'ai une question à vous soumettre, chers WriNautes

Considérons une table MySql contenant environ 37000 lignes (les communes de FR)
Un API permet d'entrer un ID et retourne les 100 id les plus proches d'une commune.
Comment faudrait-il faire pour faire un SELECT, dans une table donnée sur touts ces ID ?
Faut-il faire WHERE id=4432 OR id=4403 or id=23 OR .... OR ID=342 ?
Faudrai-il faire une fonction PHP qui optimise la requète en construisant des inégalités si possible,
ou est-ce que MySQL optimise déja sa recherche de cette façon en "pré-traitement" ?

Je repose la question, pour ceux qui n'auraient pas compris...
En SQL, si je veux sélectionner un grand nombre d'éléments dont je possède l'ID (un api me les fournis), comment construire la requète ? Dois-je faire des centaines de fois id=X or id=Y.... or id=Z ? Est-ce que SQL optimise ça tout seul ?

Merci pour vos avis et réponses.
 
WRInaute occasionnel
Salut,

Alors j'ai envi de dire que c'est une bonne questions :)
J'aurai tendance a dire que ca depend du nombre d'id que tu as. Si c'est effectivement 100 ça reste encore petit, tu peux essayer avec un
WHERE id IN (id1, id2, ..., id100).
Il faut egalement voir si c'est juste pour recuperer un ou deux champs de la seule table villes ou si tu veux faire une jointure en meme temps (ca complique).
Apres j'ai envi de dire que bien souvent avec mysql il vaut mieux faire plus de petites requêtes qu'une grosse.

Honnêtement le plus simple c'est de faire les deux méthodes et de faire un petit bench pour voir ce qui est le plus rapide.
Et surtout il faut bien mettre les bon indexs sur les tables (bon la c'est pas tres dur c'est sur les id mais quand même)

PS : pour le bench, si tu fait tourner en boucle les méthodes pour te rendre mieux compte du temps que ca met, pense a mettre SQL_NO_CACHE apres ton SELECT pour eviter d'avoir des perf biaisees par la mise en cache mysql.
 
WRInaute occasionnel
Merci pour vos réponses,

En théorie et pour l'avenir, SQL devroit (doit et devrais) optimiser ça tout seul.

Je vais faire des essais avec plusieurs méthodes. Quand des résultats seront probants, je les publierais sur ce thread.
 
Discussions similaires
Haut