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