2010-11-04 9 views
2

J'ai cette requête:MYSQL/SQL: Optimisation des requêtes

SELECT count(member_id) FROM member_favorite_business WHERE business_id=3912 AND member_id=413 

Quand je profil cette requête avec mes outils de profil de MySQL, il est dit que cette requête est très mauvaise. Il est dit:

JOIN SIZE: 16128 (VERY BAD, VERY SLOW) 


CONTAINS FULL TABLE SCANS (BAD) 

Ma question est, comment puis-je améliorer cela?

Toutes les suggestions seraient grandement appréciées

Cheers!

+0

Y a-t-il des pièces sur l'une des colonnes? –

Répondre

4

Ajouter un index sur (business_id, member_id).

Vous pouvez également écrire COUNT(*) au lieu de count(member_id) puisque member_id ne peut pas être NULL, mais je doute que cela fasse une différence considérable pour les performances.

+0

wow .. quelle différence .. il est maintenant TRES BON .. merci beaucoup Mark! – gumpi

+0

j'en ai un autre: SELECT id FROM business OERE (coordonnées! = '' AND getDistance ('- 2.1032155,49.1801863', coordonnées) <10) ET id NOT IN ('6', '4118') COMMANDER PAR rand() Date limite de 0,5 il a dit: REJOIGNEZ TAILLE: 4418 (BAD) Using temporary (BAD) UTILISATION filesort (BAD) Toute idée comment optimiser cela? – gumpi

0

Votre deuxième question dans le commentaire est plus difficile, vous pouvez le poster comme une question séparée. L'ORDER BY rand() causera des problèmes, peut-être que d'autres ont des suggestions à ce sujet. Créer un index sur (coordonnées, id) ou (id, coordonnées) voir ce qui est plus rapide. Je suppose que les 2.1032155,49.1801863 sont des coordonnées d'échantillon et vous voulez trouver 5 correspondances dans 10 "somethings" du point.

+0

C'est vrai, je vais re-poster ceci sur Question différente. Merci – gumpi