2011-10-25 19 views
0

我有兩個表:MySQL的內部聯接查詢和索引

"badges" 

badge_id, merchant_id, badge_title, badge_desc, points_req 

"badges_owned" 

badge_id, customer_id, badge_points, badge_flag 

和我的查詢是:

SELECT badges.badge_id, badges.badge_title, badges.points_req, badges_owned.badge_flag, badges_owned.badge_points 
FROM badges 
INNER JOIN badges_owned ON badges.badge_id = badges_owned.badge_id 
WHERE badges_owned.customor_id = $user 

我的問題是這樣的,這是查詢的最有效的,但越是這樣。 ..在哪裏我會放置索引使其最優化(只在customor_id和badge_id?),還是我必須覆蓋(從來沒有得到這個)?

+0

唯一真正的答案是,你必須通過查看解釋計劃來測試各種指標(包括以及正常),並查看索引使用你得到更多的數據(IE:接近100萬行) –

回答

0

您傾向於使用您正在搜索或正在加入的字段的索引。

看一看你的選擇查詢和字段和WHERE字段是索引的最有可能的人選。

請記住,更多的索引通常意味着更快的SELECTS,但也使更慢的INSERTS。 有一個權衡,所以不要只是爲了它的東西索引。

如果您使用您的查詢說明它會告訴你的查詢計劃,並正在使用什麼指標。這將有助於你選擇在哪裏把你的索引

+0

所以我會將徽章索引爲badge_id,但是我會將badge_id和customer_id索引到同一個樹中(一起)......或者它們可能是單獨的,並且還取決於左側的內容在哪裏條款的最右邊? – re1man