lorik Posté 3 Août 2016 Posté 3 Août 2016 Bonjour à tous, Je ne suis pas très affuté sur les questions de perfs sous mysql, au niveau conception de bdd, donc je sollicite un avis. Voila le contexte (c'est un projet, j'ai pas les données, sinon je pourrais tester) : - une table de 3 000 000 d'enregistrements (des adresses, avec un champ code postal). Pour chaque code postal de la table, j'ai 1000 codes postaux 'compatibles' (differents à chaque fois, 1000 compatibles pour CHAQUE code postal) - Je veux trouver dans cette table tous les enregistrements 'compatibles' avec un code postal précis. en français, ça donne : "Je veux toutes les adresses dont le code postal est compatible avec le code postal 75 000". A priori j'ai 3 choix : - 1 - soit je mets un champ text 'compatible' dans la table, je stocke par enregistrement les 1000 codes postaux compatibles, et je fait un select * where compatible like '%75000%. - 2- soit j'intercale une table (6600 enregistrement) : Code_postal | liste_compatibilité, et une jointure. Et je like dessus comme le choix 1. Interet, la liste n'est stockée qu'une fois (gain d'espace), mais j'ai une jointure de plus, donc impact sur la perf de la requete ? 3 - je fais un bete select * where code_postal in ('mes 1000 codespostaux compatibles) Sachant que la perf de la requete est fondamentale, sur un site à fort trafic 100 000 visites/jours. Si je peux avoir un avis éclairé, ça serait super Merci d'avance. PS : Je suis aussi très ouvert à d'autres solution, hein !
PeaX Posté 6 Août 2016 Posté 6 Août 2016 La première solution me paraît beaucoup être la meilleure solution si tu souhaites mettre en priorité le temps d'execution.
lorik Posté 6 Août 2016 Auteur Posté 6 Août 2016 Merci de la réponse. Un like serait plus rapide qu'un IN, donc... Ok, je vais utiliser ça !
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant