2010-11-04 2 views
2

У меня есть этот запрос:MYSQL/SQL: Оптимизация запросов

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

Когда я профиль этого запроса с моими MySQL инструментов профиля, он говорит, что этот запрос очень плохо. Он сказал:

JOIN SIZE: 16128 (VERY BAD, VERY SLOW) 


CONTAINS FULL TABLE SCANS (BAD) 

Мой вопрос в том, как я могу улучшить это?

Любые предложения будут высоко оценены

Ура!

+0

Есть ли какие-либо детекции на любой из столбцов? –

ответ

4

Добавить индекс на (business_id, member_id).

Вы также можете написать COUNT(*) вместо count(member_id), так как member_id не может быть NULL, но я сомневаюсь, что это существенно повлияет на производительность.

+0

wow .. какой разница .. сейчас VERY GOOD .. большое спасибо Mark! – gumpi

+0

У меня есть еще один: SELECT id FROM business WHERE (координаты! = '' AND getDistance ('- 2.1032155,49.1801863', координаты) <10) И id NOT IN ('6', '4118') ЗАКАЗАТЬ BY RAND() LIMIT 0,5 он сказал: РЕГИСТРИРУЙТЕСЬ РАЗМЕР: 4418 (BAD) ИСПОЛЬЗОВАНИЕ ВРЕМЕННОЙ (BAD) USING FileSort (БАД) Любая идея, как оптимизировать это? – gumpi

0

Ваш второй вопрос в комментарии сложнее, вы можете опубликовать его как отдельный вопрос. ORDER BY rand() вызовет проблемы, возможно, у других есть предложения по этому поводу. Создайте индекс по (координаты, идентификатор) или (id, координаты), которые видят быстрее. Я предполагаю, что 2.1032155,49.1801863 являются образцовыми координатами, и вы хотите найти 5 матчей в пределах 10 "somethings" точки.

+0

Правильно, я повторно отправлю это по другому Вопросу. благодаря – gumpi