2012-02-29 95 views
2

我有一個名爲clicks的表,它記錄了網站周圍的鼠標點擊。該模式是這樣的:涉及同一列的多個索引是否有用?

enter image description here

有此數據運行的3個主要的疑問:

  • 「SELECT *中,pageid = XXXX」
  • 「SELECT * WHERE visitorid = xxx和pageid = xxxx「
  • 」SELECT visitorid,MIN(time)AS mintime WHERE pageid = xxxx GROUP BY visitorid「

未來我也可能在查詢中使用maintestid。因此,這看起來像:

  • 「SELECT * WHERE maintestid = XXXX」

所以我加2個索引表中的這兩個,象這樣的主鍵一起查詢:

enter image description here

我有3個問題:

  1. 這個主鍵有用嗎?或者我應該只讓它成爲ID列?

  2. pageid索引是否有用?或者,如果pageid的所有查詢都由pageid_visid索引處理,它會一樣快嗎?

  3. 當我想在未來通過maintestid進行搜索時,我應該在maintestid列上添加一個索引還是其他的東西?

回答

4
  1. 主鍵是有用就像你擁有了它 - 該索引的其他列將永遠不會被使用。只是使它在id只有
  2. pageid只指數是略微有用的,它的條目將適合於較小的索引頁,但我會放棄它,讓MySQL的使用其他基於的pageid指數(做一個標杆測試確認)
  3. 是 - 定義索引來匹配您的重要問題
0

爲什麼要這麼做?

無論如何,如果你想讓他們的pageid,pageid_visid和maintestid作爲索引,那麼一切都很好......但如果你只有一個id作爲主要因爲它更合適,會更好。反正,你可以查詢他們都使用其他的ID

+0

「這將是更好,如果你只有一個ID爲主要因爲它是比較合適的」 - 你所說的「多指什麼適當」? – onedaywhen 2012-02-29 10:05:07

相關問題