2010-11-04 49 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

是否有任何列上的indeces? – 2010-11-04 11:44:12

回答

4

(business_id, member_id)上添加索引。

你也可以写COUNT(*)而不是count(member_id),因为member_id不能为NULL,但我怀疑这会对性能产生很大的影响。

+0

哇..有什么区别..它现在非常好..非常感谢你马克! – gumpi 2010-11-04 11:44:36

+0

我还有一个: SELECT id FROM business WHERE(coordinates!=''AND getDistance(' - 2.1032155,49.1801863',coordinates)<10)AND id NOT IN('6','4118')ORDER BY RAND()LIMIT 0,5 它说: 连接大小:4418(BAD) 使用临时(BAD) 使用文件排序(BAD) 任何想法如何优化呢? – gumpi 2010-11-04 11:46:45

0

你在评论中的第二个问题更困难,你可能想把它作为一个单独的问题发布。 ORDER BY rand()会导致问题,也许其他人有这方面的建议。在(坐标,ID)或(ID,坐标)上创建索引,查看哪个更快。我假设2.1032155,49.1801863是样本坐标,并且您希望在该点的10个“somethings”内找到5个匹配。

+0

这是对的,我将在不同的问题上重新发布。谢谢 – gumpi 2010-11-04 12:20:25